Gcc Makefile:";没有这样的文件或目录;对于目标文件

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

首先,我应该承认makefiles是我非常缺乏经验的东西,所以如果这是一个我本应该能够自己解决的错误,我很抱歉,但是我已经花了好几个小时在这个问题上,包括在这个网站上阅读各种答案,并且一直无法找到解决方案

话虽如此,我已经创建了以下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

任何帮助都将不胜感激;提前谢谢你。

你的假设是正确的。您的配方试图使用
xPlatST
作为源。将规则中的
-c
更改为
-o

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

-c
标志告诉编译器获取所有文件,编译并将它们汇编成一个目标文件(
.o
)。
-o
标志指定目标文件。

啊,我明白了。非常感谢。这解释了很多。我曾经尝试过,虽然之前并不真正理解为什么,但它只是产生了更多的错误,所以我认为我一定是走错了方向——结果我的include行也有点错误,现在一切正常。