Makefile使用教程1

规则(Rules):一个Makefile文件由一条一条的规则构成,一条规则结构如下

target … (目标): prerequisites …(依赖)
        recipe(方法)
        …
        …

最简单的Makefile

hello: hello.cpp
    g++ hello.cpp -o hello # 开头必须为一个Tab,不能为空格

但通常需要将编译与链接分开写,分为如下两步

hello: hello.o
    g++ hello.o -o hello
hello.o: hello.cpp
    g++ -c hello.cpp

Makefile文件的命名与指定

Make会自动查找makefile文件,查找顺序为GNUmakefile -> makefile -> Makefile

GNUmakefile:不建议使用,因为只有GNU make会识别,其他版本的make(如BSD make, Windows nmake等)不会识别,如果只给GNU make使用的情况

makefile:可以使用,GNU make和其他版本make识别

Makefile:最常用,强烈建议使用

如果运行make的时候没有找到以上名字的文件,则会报错,这时候可以手动指定文件名

make -f mkfile  # make -f <filename>
make --file=mkfile # make --file=<filename>
 手动指定之后,make就会使用指定的文件,即使有Makefile或者makefile不会再自动使用    

Makefile文件内容组成

一个Makefile文件通常由五种类型的内容组成:显式规则、隐式规则、变量定义、指令和注释

显式规则(explicit rules):显式指明何时以及如何生成或更新目标文件,显式规则包括目标、依赖和更新方法三个部分

隐式规则(implicit rules):根据文件自动推导如何从依赖生成或更新目标文件。

变量定义(variable definitions):定议变量并指定值,值都是字符串,类似C语言中的宏定义(#define),在使用时将值展开到引用位置

指令(directives):在make读取Makefile的过程中做一些特别的操作,包括:

  1. 读取(包含)另一个makefile文件(类似C语言中的#include)

  2. 确定是否使用或略过makefile文件中的一部分内容(类似C语言中的#if)

  3. 定义多行变量

注释(comments):一行当中 # 后面的内容都是注释,不会被make执行。make当中只有单行注释。如果需要用到#而不是注释,用\#。

 查看源文件的依赖文件

g++ -MM main.cpp

  

 
posted @ 2024-05-23 21:10  NAVYSUMMER  阅读(19)  评论(0)    收藏  举报
交流群 编程书籍