首先,我应该承认makefile是我非常缺乏经验的东西,所以我很抱歉,如果这是一个我应该能够自己解决的错误,但我已经花了几个小时,包括阅读各种在这个网站上的答案,并一直无法找到解决方案。
说到这里,我创建了以下makefile来在Linux机器上编译我的代码;它完成了子编译就好了,但是当涉及到输出本身xPlatST时,它会抛出一个错误。
g++ -std=c+=11 -g -Wall -pthread -c -o xPlatST.o xPlatST.cpp
g++ -std=c+=11 -g -Wall -pthread -c -o stdafx.o stdafx.cpp
g++ -std=c+=11 -g -Wall -pthread -c xPlatST xPlatST.o stdafx.o -L../hwloc
g++ error: xPlatST: No such file or directory
make: *** [xPlatST] Error 1
我相信它似乎认为xPlatST是其中一个编译文件,因此无法找到它,但对于我的生活我无法理解为什么。
hwloc是第三方库,应该与此问题无关。从命令行直接编译时,代码编译得很好。
我的文件是xPlatST.cpp,xPlatST.h,stdafx.cpp,stdafh.h
代码如下:
CXX = g++ -std=c++11
INCLUDES =
LIBS = -L../hwloc
CXXFLAGS = -Wall -g -pthread
OBJS = xPlatST.o stdafx.o
xPlatST: ${OBJS}
${CXX} ${CXXFLAGS} ${INCLUDES} -c $@ ${OBJS} ${LIBS}
clean:
-rm xPlatST *.o
非常感谢任何帮助;提前谢谢你。
答案 0 :(得分:3)
你的假设是正确的。您的食谱正在尝试使用xPlatST
作为来源。将-c
更改为规则中的-o
:
${CXX} ${CXXFLAGS} ${INCLUDES} -o $@ ${OBJS} ${LIBS}
-c
标志告诉编译器获取所有文件,编译并将它们组装到目标文件(.o
)中。 -o
标志指定目标文件。