Makefile - 规则

  • 简述

    我们现在将学习 Makefile 的规则。
    Makefile 目标规则的一般语法是 -
    
    target [target...] : [dependent ....]
    [ command ...]
    
    在上面的代码中,括号中的参数是可选的,省略号表示一个或多个。在这里,请注意每个命令前面的选项卡是必需的。
    下面给出了一个简单的示例,您可以在其中定义一个规则以使您的目标从其他三个文件中打招呼。
    
    hello: main.o factorial.o hello.o
       $(CC) main.o factorial.o hello.o -o hello
    
    NOTE- 在本例中,您必须给出规则以从源文件生成所有目标文件。
    语义非常简单。当您说“制作目标”时,make找到适用的目标规则;并且,如果任何家属比目标新,make一次执行一个命令(在宏替换之后)。如果必须建立任何依赖项,则首先发生(所以你有一个递归)。
    Make如果任何命令返回失败状态,则终止。在这种情况下将显示以下规则 -
    
    clean:
       -rm *.o *~ core paper
    
    Make忽略以破折号开头的命令行上返回的状态。例如,谁在乎是否没有核心文件?
    Make在宏替换之后回显命令以向您显示正在发生的事情。有时您可能想关闭它。例如 -
    
    install:
       @echo You must be root to install
    
    人们已经开始期待 Makefile 中的某些目标。您应该始终先浏览。但是,可以合理地期望找到目标 all(或只是 make)、install 和 clean。
    • make all- 它编译所有内容,以便您可以在安装应用程序之前进行本地测试。
    • make install− 它将应用程序安装在正确的位置。
    • make clean− 它清理应用程序、删除可执行文件、任何临时文件、目标文件等。
  • Makefile 隐式规则

    该命令应该适用于我们从源代码 x.cpp 构建可执行 x 的所有情况。这可以说是一个隐含的规则 -
    
    .cpp:
       $(CC) $(CFLAGS) $@.cpp $(LDFLAGS) -o $@
    
    这个隐含的规则说明了如何从 xc 中生成 x——在 xc 上运行 cc 并调用输出 x。该规则是隐含的,因为没有提到特定的目标。它可以在所有情况下使用。
    另一个常见的隐含规则是从 .cpp(源文件)构建 .o(对象)文件。
    
    .cpp.o:
       $(CC) $(CFLAGS) -c
    
    
                                  
    lt;
    alternatively
    .cpp.o:
       $(CC) $(CFLAGS) -c $*.cpp