Gcc Makefile:";没有这样的文件或目录;对于目标文件
首先,我应该承认makefiles是我非常缺乏经验的东西,所以如果这是一个我本应该能够自己解决的错误,我很抱歉,但是我已经花了好几个小时在这个问题上,包括在这个网站上阅读各种答案,并且一直无法找到解决方案 话虽如此,我已经创建了以下makefile来在Linux机器上编译我的代码;它可以很好地完成子编译,但是当它要生成输出本身xPlatST时,它会抛出一个错误Gcc Makefile:";没有这样的文件或目录;对于目标文件,gcc,makefile,Gcc,Makefile,首先,我应该承认makefiles是我非常缺乏经验的东西,所以如果这是一个我本应该能够自己解决的错误,我很抱歉,但是我已经花了好几个小时在这个问题上,包括在这个网站上阅读各种答案,并且一直无法找到解决方案 话虽如此,我已经创建了以下makefile来在Linux机器上编译我的代码;它可以很好地完成子编译,但是当它要生成输出本身xPlatST时,它会抛出一个错误 g++ -std=c+=11 -g -Wall -pthread -c -o xPlatST.o xPlatST.cpp g++ -st
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
任何帮助都将不胜感激;提前谢谢你。你的假设是正确的。您的配方试图使用
xPlatST
作为源。将规则中的-c
更改为-o
:
${CXX} ${CXXFLAGS} ${INCLUDES} -o $@ ${OBJS} ${LIBS}
-c
标志告诉编译器获取所有文件,编译并将它们汇编成一个目标文件(.o
)。-o
标志指定目标文件。啊,我明白了。非常感谢。这解释了很多。我曾经尝试过,虽然之前并不真正理解为什么,但它只是产生了更多的错误,所以我认为我一定是走错了方向——结果我的include行也有点错误,现在一切正常。