C++ 获取makefile以更改输出可执行文件名
我正在为一个学校作业写一个makefile,我遇到了一些问题。我似乎无法使用-o标志将输出可执行文件命名为我想要的名称。相反,它创建了一个名为a.out的可执行文件(该文件运行正常) 当我使用“makeclean”命令时,它告诉我我想要的可执行文件名不存在。我对“make”命令如何不能识别程序名和“makeclean”命令如何识别程序名感到困惑。如有任何反馈,将不胜感激C++ 获取makefile以更改输出可执行文件名,c++,makefile,C++,Makefile,我正在为一个学校作业写一个makefile,我遇到了一些问题。我似乎无法使用-o标志将输出可执行文件命名为我想要的名称。相反,它创建了一个名为a.out的可执行文件(该文件运行正常) 当我使用“makeclean”命令时,它告诉我我想要的可执行文件名不存在。我对“make”命令如何不能识别程序名和“makeclean”命令如何识别程序名感到困惑。如有任何反馈,将不胜感激 PROGRAM = osuSystem CXX = g++ CXXFLAGS = -std=c++0x SOURCE
PROGRAM = osuSystem
CXX = g++
CXXFLAGS = -std=c++0x
SOURCES = $(wildcard *.cpp)
OBJECTS = $(SOURCES:.cpp=.o)
HEADERS = $(wildcard *.hpp)
default: ${OBJECTS}
${CXX} ${CXXFLAGS} ${OBJECTS} ${HEADERS] ${SOURCES} -o ${PROGRAM}
clean:
rm ${OBJECTS} ${PROGRAM}
您的
default:${OBJECTS}
行告诉make将所有源代码编译成.o
文件,因此下一行只需链接.o
文件,不应提及源文件:
default: ${OBJECTS}
${CXX} ${CXXFLAGS} ${OBJECTS} -o ${PROGRAM}
我在本地重现了你的问题,这一改变使它起了作用。对于clean,您应该使用
rm-f
,这样当您运行clean
时,当要删除的某些对象/程序不存在时,它不会抱怨并删除那些确实存在的对象/程序。如果将-o${program}
移到前面,会有什么区别吗-o${PROGRAM}${CXX}${cxflags}…
选项意味着只创建-c
文件。你在哪里看到的?@Barmar Make知道如何将.cpp文件编译成.o文件,并且当你将对象指定为目标的依赖项时,它会隐式地进行编译;上面,相关目标是“默认值”
”。如果default
依赖于${SOURCES}
而不是${OBJECTS}
,那么default
构建步骤将需要显式编译.cpp
s。