我有以下makefile:
main.o: ServerSocket/main.cpp ../Shared/socket.h
g++ -c ServerSocket/main.cpp -lstdc++
DriveInfo.o: ServerSocket/DriveInfo.cpp ServerSocket/DriveInfo.h ServerSocket/Consts.h
g++ -c ServerSocket/DriveInfo.cpp -lstdc++
ProcessInfo.o: ServerSocket/ProcessInfo.cpp ServerSocket/ProcessInfo.h ServerSocket/Consts.h
g++ -c ServerSocket/ProcessInfo.cpp -lstdc++
thread_pool.o: ServerSocket/thread_pool.cpp ServerSocket/thread_pool.h
DriveInfo.o ProcessInfo.o thread_pool.o
server: main.o
g++ -o server main.o
DriveInfo.o ProcessInfo.o thread_pool.o
问题是该文件只有一个命令正在执行,所以如果我想执行下一个<我必须删除或评论上一个命令。这个makefile有什么问题?
答案 0 :(得分:19)
默认执行您提供的第一条规则。
您想要创建一个执行您提供的所有规则的规则
all : main.o DriveInfo.o ProcessInfo.o thread_pool.o
并将其放在Makefile的开头或使用make all
答案 1 :(得分:4)
这是设计的。您可以告诉make
要构建哪些目标:
make main.o DriveInfo.o
将构建这两个目标。或者,如果您希望make
默认构建所有(或某些)目标,您可以在Makefile 的开头指定一个规则,说明:
all: main.o DriveInfo.o …
现在,make all
(或仅make
)将构建所有相关目标。将all
声明为phony target告诉make
它与实际存在的文件不对应,这也是一种很好的做法。通过将.PHONY: all
放入Makefile中来完成此操作。
最后一句话,名称all
是任意的。您可以在此处使用任何其他名称,但all
是常规名称。重要的是,如果你希望它是在没有任何明确目标的情况下调用make
时执行的规则,那么它就是Makefile中的第一个规则。