位置:首页 > 其他技术 > Makefile > 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) $@.cpp $(LDFLAGS) -o $@

这种隐含的规则说,如何make c,  x.c- 运行x.c 调用输出x。规则是隐式的,因为没有特定的目标提到。它可用于在所有的情况下。

另一种常见的隐含规则的构造 .o(对象)文件和 .cpp (源文件)。 

.o.cpp:
        $(CC) $(CFLAGS) -c $<

alternatively

.o.cpp:
        $(CC) $(CFLAGS) -c $*.cpp