规约
编译源文件
| 1 | (CC) $(CPPFLAGS) $(CFLAGS) example.c -c -o example.o # -c: 编译,不执行链接操作 | 
链接
| 1 | (CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) example.c -o example # -o: 指定输出文件名字 | 
命令
| 命令 | 说明 | 
|---|---|
| CC | C 编译器 | 
| CXX | C++ 编译器 | 
| CPP | C / C++ 预编译器,通常是 “$(CC) -E” | 
示例
| 1 | export CC=/usr/local/bin/gcc-7 | 
变量
| 变量 | 含义 | 示例 | 
|---|---|---|
| CFLAGS | C 编译器选项 | |
| CXXFLAGS | C++ 编译器选项 | |
| CPPFLAGS | C/C++ 预处理器的命令行参数 | |
| LDFLAGS | 链接参数 | |
| LD_LIBRARY_PATH | 运行时动态链接库查找路径 | |
| LIBRARY_PATH | 编译时链接库查找路径 | /usr/lib | 
| C_INCLUDE_PATH | 头文件查找路径 | |
| CPLUS_INCLUDE_PATH | C++ 头文件查找路径 | |
| OBJC_INCLUDE_PATH | ObjectiveC 头文件查找路径 | |
| CPATH | C/C++/ObjectiveC 头文件默认查找路径,多个路径使用 :分隔,比如.:/root/include | |
| DYLD_LIBRARY_PATH | Mac OS 动态链接库查找路径 | 
参数
| 参数 | 说明 | 示例 | 
|---|---|---|
| c | 编译 | -c | 
| o | 输出文件名称 | -o | 
| g | 添加调试信息 | -g | 
| l(小写L) | 链接标准库 | -lz | 
| L | 指定库搜索路径 | -L/user/local/lib | 
| I(大写i) | 指定头文件搜索路径 | -I/user/local/include | 
| static | 在支持动态链接的系统中,该参数覆盖-pie,并阻止链接共享库 | -static | 
| shared | 生成可被链接的共享对象 | -shared | 
| PIC / pic | 使用位置无关代码创建对象文件,创建共享库时需指定 | -fpic / -fPIC | 
说明
- -llibrary/- -l library链接时,搜索指定库,优先使用共享库,除非指定- -static参数