make
用来解释Makefile文件(这里使用GNU make,当然还有别的)。
可以自动化选择编译哪些文件,可以跑不止c++的代码。
格式
| target: dependencies
commands
target: file1.cpp file2.cpp
g++ -o target file1.cpp file2.cpp
|
注意这里是依赖,而不是参数,依赖关系应该是个DAG(有向无环图)。
变量
变量在使用时需要加上美元符号($)和括号,例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | # 这是一个注释行
CC=g++
# CFLAGS 是传递给编译器的选项。
CFLAGS= -c -Wall
all: prog
prog: main.o factorial.o hello.o
$(CC) main.o factorial.o hello.o -o prog
main.o: main.cpp
$(CC) $(CFLAGS) main.cpp
factorial.o: factorial.cpp
$(CC) $(CFLAGS) factorial.cpp
hello.o: hello.cpp
$(CC) $(CFLAGS) hello.cpp
clean:
rm -rf *.o
|
自动推导
make的隐含规则
c
.PHONY表示clean是一个伪目标文件
内部宏
这些是 make 中预定义的。
使用 make -p 列出当前构建的所有宏、后缀规则和目标
动态更新
| app : main.o kbd.o command.o
gcc -o app main.o kbd.o command.o
main.o : main.c defs.h
gcc -c main.c
kbd.o : kbd.c defs.h command.h
gcc -c kbd.c
command.o : command.c defs.h command.h
gcc -c command.c
clean :
rm app main.o kbd.o \
command.o
|
cmake
构建make的工具
资料
TODO bilibili
GNU Make 使用手册(中译版)
A Short Introduction to Makefile
http://www.uinio.com/Linux/CMake/
跟我一起写 Makefile