Table of Contents

Makefile

Makefile的使用非常广, 除了作为C/C++项目用于构建, 在日常的一些其它小项目里, 也可以简单的使用target来快速做一些操作集合, 类似于一个shell script带有一些子命令.

如我的项目SimikiMakefile.

注释: 使用 #

宏:

有默认的值, 也可以修改:

CC=gcc

然后使用宏:

build:
    $(CC) xxx.c

最基本的结构 target(目标):

test: clean
    nosetests -v --no-byte-compile --with-coverage --cover-package=simiki --cover-erase -s

这里target是test, clean是dependency(依赖), 下面的是这个target要执行的主体.

make test

等价于:

make clean
nosetests -v --no-byte-compile --with-coverage --cover-package=simiki --cover-erase -s

依赖是线性串联的, 使用起来非常方便.

第一个target是默认的目标, 如果单纯的执行make, 则会执行第一个target.

target主体中命令加上@符号(at sign):

test:
    echo 'print this command and then run'
    @echo 'only run this command'

一般情况逐行执行, 先打印一条命令的内容, 再执行这条命令, 加上@符号表示不打印这条命令, 直接执行.

如上结果是:

echo 'print this command and then run'
print this command and then run
only run this command

参考: Recipe Echoing

另外, target主体必须要以 tab 开始, 不能是4个空格.

伪目标(.PHONY), 一般用于clean, 用于避免目录下有与clean target同名文件, 导致make失败; 另外还可以提高make时的效率?(没有感触)

.PHONY: clean

clean:
    rm -rf *.o

CMakefile

TODO

参考