教程 > makefile > 阅读:41

在 makefile 中定义规则——迹忆客-ag捕鱼王app官网

我们现在将学习 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 会找到适用的 target 规则; 并且,如果任何依赖项比目标更新,则 make 一次执行一个命令(在宏替换之后)。 如果必须创建任何依赖项,则首先发生(因此我们有递归)。

如果任何命令返回失败状态,make 将终止。 在这种情况下将显示以下规则

clean:
   -rm *.o *~ core paper

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

make 回显命令,在宏替换后向我们展示正在发生的事情。 有时我们可能想将其关闭。 例如

install:
   @echo you must be root to install

人们开始期待 makefile 中的某些目标。 我们应该始终先浏览。 但是,可以合理地期望找到目标 all(或只是 make)、installclean

  • 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

查看笔记

扫码一下
查看教程更方便
网站地图