Makefile 定义规则 - Makefile
一个Makefile目标规则的一般语法
target [target...] : [dependent ....]
[ command ...]
方括号中的项是可选的,省略号是指一个或多个。注意标签,每个命令前需要。
下面给出一个简单的例子,定义了一个规则使您的目标从 hello 其他三个文件。
```
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) [email protected] $(LDFLAGS) -o $@
```
这种隐含的规则说,如何make c, x.c- 运行x.c 调用输出x。规则是隐式的,因为没有特定的目标提到。它可用于在所有的情况下。
另一种常见的隐含规则的构造 .o(对象)文件和 .cpp (源文件)。
```
.o.cpp:
$(CC) $(CFLAGS) -c >