Make:期望有2个依赖项,但只存在1个



假设我有一个带有以下make-file的小项目。请注意生成o文件(2个依赖项-到。cpp和。hpp)。

LIB_OPTS = -lpthread
CPP_OPTS = -std=c++11 -Wall
all: main
   ${CXX} ${CPP_OPTS} ${LIB_OPTS} *.o -o main
main: a.o b.o c.o main.o
%.o: %.cpp %.hpp
    ${CXX} ${CPP_OPTS} ${LIB_OPTS} -g -c $< -o $@
clean:
   rm *.o

a, b和c确实有CPP和hpp文件。

main只有一个。cpp。

输出如下:

g++ -std=c++11 -Wall -lpthread -g -c a.cpp -o a.o
g++ -std=c++11 -Wall -lpthread -g -c b.cpp -o b.o
g++ -std=c++11 -Wall -lpthread -g -c c.cpp -o c.o
g++    -c -o main.o main.cpp
g++ -std=c++11 -Wall -lpthread *.o -o main

main.o的生成呢??

这是怎么来的?这与我的规则无关。

如果我有一个main.hpp,它将捕获我的规则。当然,我可以为main创建一个单独的规则。但我期望%。

谢谢你的帮助!克里斯。

GNU make有许多内置规则。其中一个规则知道如何从.cpp文件创建.o文件。因为你的规则都不能创建main.o, make查看它自己的内置规则,并找到一个可以使用的规则。

可以使用如下命令查看内置规则的完整列表:

make -pf/dev/null

您可以运行make,这样它就不会使用make -r的任何内置规则。

最新更新