Makefile 定义规则
一个Makefile目标规则的一般语法
target [target...] : [dependent ....] [ command ...] |
方括号中的项是可选的,省略号是指一个或多个。注意标签,每个命令前需要。
hello: main.o factorial.o hello.o $(CC) main.o factorial.o hello.o -o hello |
注:在这个例子中,你必须放弃规则,使所有对象从源文件的文件
语义是相当简单的。当"make target"发现目标规则适用,如有眷属的新目标,使执行的命令一次一个(后宏替换)。如果有任何依赖进行,即先发生(让您拥有一个递归)。
如果有任何命令返回一个失败状态,MAKE将终止。这就是为什么看到规则,如:
clean: -rm *.o *~ core paper |
Make忽略一个破折号开头的命令行返回的状态。例如。如果没有核心文件,谁在乎呢?
Make 会 echo 宏字符串替换的命令后,告诉发生了什么事,因为它发生。有时可能想要把它们关掉。例如:
install: @echo You must be root to install |
大家所期望的Makefile的 某些目标。应该总是先浏览,但它的合理预期的目标(或只是做),安装,清洁,会发现。
-
make all - 编译一切,让你可以在本地测试,之前安装的东西。
-
make install - 应安装在正确的地方的东西。但看出来的东西都安装在正确的地方为系统。
-
make clean - 应该清理的东西。摆脱的可执行文件,任何临时文件,目标文件等。
Makefile的隐含规则
该命令应该在所有情况下,我们建立一个可执行x的的源代码x.cpp的作为一个隐含的规则,这可以说:
.cpp: $(CC) $(CFLAGS) $@.cpp $(LDFLAGS) -o $@ |
这种隐含的规则说,如何make c, x.c- 运行x.c 调用输出x。规则是隐式的,因为没有特定的目标提到。它可用于在所有的情况下。
另一种常见的隐含规则的构造 .o(对象)文件和 .cpp (源文件)。
.o.cpp: $(CC) $(CFLAGS) -c $< alternatively .o.cpp: $(CC) $(CFLAGS) -c $*.cpp |