只执行makefile的第一个命令

时间:2012-10-11 10:47:16

标签: makefile

我有以下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有什么问题?

2 个答案:

答案 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中的第一个规则。