我有以下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
Run Code Online (Sandbox Code Playgroud)
问题只是该文件的一个命令正在执行,所以如果我想执行下一个<我必须删除或注释上一个命令.这个makefile有什么问题?
tom*_*ahh 19
默认情况下,执行您提供的第一条规则.
您想要创建一个执行您提供的所有规则的规则
all : main.o DriveInfo.o ProcessInfo.o thread_pool.o
Run Code Online (Sandbox Code Playgroud)
并将其放在Makefile的开头或调用它 make all
这是设计使然。您可以知道make要构建哪些目标:
make main.o DriveInfo.o\nRun Code Online (Sandbox Code Playgroud)\n\n将建立这两个目标。或者,如果您希望make默认构建所有(或部分)目标,您可以在 Makefile 的开头指定一条规则,说明:
all: main.o DriveInfo.o \xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n\n现在,make all(或只是make)将构建所有依赖目标。将 xe2x80x99 声明all为虚假目标以表明make它与实际存在的文件不对应也是一个很好的做法。.PHONY: all通过放入 Makefile来完成此操作。
最后一点,名称all是任意的。您可以在这里使用任何其他名称,但all必须是常规名称。重要的是,如果您希望在没有任何明确目标的情况下调用时执行\xe2\x80\x99 规则,则它\xe2\x80\x99 是Makefile 中的第一条规则。make