Makefile:目标文件的“没有这样的文件或目录”

时间:2018-05-08 12:01:13

标签: gcc makefile

首先,我应该承认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

非常感谢任何帮助;提前谢谢你。

1 个答案:

答案 0 :(得分:3)

你的假设是正确的。您的食谱正在尝试使用xPlatST作为来源。将-c更改为规则中的-o

${CXX} ${CXXFLAGS} ${INCLUDES} -o $@ ${OBJS} ${LIBS}

-c标志告诉编译器获取所有文件,编译并将它们组装到目标文件(.o)中。 -o标志指定目标文件。