makefile 入门

近来要用到 Python 与 C++ 的混合编程,编译 C++ 接口用到了 makefile。特地了解一下。。

1. Makefile 简介

一般大型项目都需要 makefile 来组织,通过它可以解决各种库和代码之间的依赖关系。

1.1 Makefile 主要的 5个部分 (显示规则, 隐晦规则, 变量定义, 文件指示, 注释)

Makefile 基本格式如下:

target ... : prerequisites ...
    command
    ...
    ...

其中,

  • target        – 目标文件, 可以是 Object File, 也可以是可执行文件
  • prerequisites – 生成 target 所需要的文件或者目标
  • command       – make需要执行的命令 (任意的shell命令), Makefile 中的命令必须以 [tab] 开头
  1. 显示规则 :: 说明如何生成一个或多个目标文件(包括 生成的文件, 文件的依赖文件, 生成的命令)
  2. 隐晦规则 :: make 的自动推导功能所执行的规则
  3. 变量定义 :: Makefile 中定义的变量
  4. 文件指示 :: Makefile 中引用其他Makefile; 指定Makefile中有效部分; 定义一个多行命令
  5. 注释     :: Makefile 只有行注释 “#”, 如果要使用或者输出”#”字符, 需要进行转义, “\#”
1.2 GNU make 的工作方式
  1. 读入主Makefile (主Makefile中可以引用其他Makefile)
  2. 读入被include的其他Makefile
  3. 初始化文件中的变量
  4. 推导隐晦规则, 并分析所有规则
  5. 为所有的目标文件创建依赖关系链
  6. 根据依赖关系, 决定哪些目标要重新生成
  7. 执行生成命令
 2.Makefile 初级语法

2.1 Makefile 规则

2.1.1 规则语法

规则主要有2部分: 依赖关系 和 生成目标的方法.

语法有以下2种:

target ... : prerequisites ...
    command
    ...

或者

target ... : prerequisites ; command
    command
    ...

* command太长, 可以用 “\” 作为换行符

2.1.2 规则中的通配符
  • *     :: 表示任意一个或多个字符
  • ?     :: 表示任意一个字符
  • […] :: ex. [abcd] 表示a,b,c,d中任意一个字符, [^abcd]表示除a,b,c,d以外的字符, [0-9]表示 0~9中任意一个数字
  • ~     :: 表示用户的home目录

 

Share this to:
Posted in c++

发表评论

电子邮件地址不会被公开。 必填项已用*标注