假设我有一个带有以下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
的任何内置规则。