定义Makefile中的规则

定义Makefile中的规则

我们现在将学习Makefile的规则。

Makefile目标规则的一般语法是 —

target [target...] : [dependent ....]
[ command ...]

在上面的代码中,括号中的参数是可选的,省略号表示一个或多个。这里要注意的是,每个命令前面的tab是必须的。

下面给出了一个简单的例子,你定义了一个规则,使你的目标从其他三个文件中打招呼。

hello: main.o factorial.o hello.o
   $(CC) main.o factorial.o hello.o -o hello

注意 - 在这个例子中,你必须给出规则,从源文件中制作所有对象文件。

其语义非常简单。当你说 “make target “时, make 会找到适用的目标规则;并且,如果任何依赖文件比目标文件新, make 会一次执行这些命令(在宏替换之后)。如果有任何依赖项必须被制作,那就先执行(所以你有一个递归)。

如果任何命令返回失败状态, make 就会终止。在这种情况下,下面的规则会显示 –

clean:
   -rm *.o *~ core paper

Make 忽略了以破折号开头的命令行的返回状态。例如,谁会在乎是否有核心文件?

Make 会在巨集替换后对命令进行回声,以显示正在发生的事情。有时你可能想把它关掉。比如说–

install:
   @echo You must be root to install

人们已经开始期待Makefiles中的某些目标。你应该总是先浏览。然而,期望找到all(或只是make)、install和clean这些目标是合理的。

  • make all – 它编译了所有的东西,这样你就可以在安装应用程序之前进行本地测试。

  • make install – 它将应用程序安装在正确的地方。

  • make clean – 它清理应用程序,删除可执行文件、任何临时文件、对象文件等。

Makefile的隐含规则

这个命令应该在所有我们从源代码x.cpp中构建可执行文件x的情况下工作。这可以说是一个隐含的规则–

.cpp:
   (CC)(CFLAGS) @.cpp(LDFLAGS) -o $@

这条隐含规则说的是如何从x.c中生成x–在x.c上运行cc并调用输出的x。这条规则是隐含的,因为没有提到特定的目标。它可以在所有情况下使用。

另一个常见的隐式规则是用于从.cpp(源文件)中构建.o(对象)文件。

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

alternatively

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程