Skip to content

规约

编译源文件

shell
$(CC) $(CPPFLAGS) $(CFLAGS) example.c -c -o example.o # -c: 编译,不执行链接操作

链接

shell
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) example.c -o example # -o: 指定输出文件名字

命令

命令说明
CCC 编译器
CXXC++ 编译器
CPPC / C++ 预编译器,通常是 "$(CC) -E"

示例

shell
export CC=/usr/local/bin/gcc-7
export CXX=/usr/local/bin/g++-7

变量

变量含义示例
CFLAGSC 编译器选项
CXXFLAGSC++ 编译器选项
CPPFLAGSC/C++ 预处理器的命令行参数
LDFLAGS链接参数
LD_LIBRARY_PATH运行时动态链接库查找路径
LIBRARY_PATH编译时链接库查找路径/usr/lib
C_INCLUDE_PATH头文件查找路径
CPLUS_INCLUDE_PATHC++ 头文件查找路径
OBJC_INCLUDE_PATHObjectiveC 头文件查找路径
CPATHC/C++/ObjectiveC 头文件默认查找路径,多个路径使用 : 分隔,比如 .:/root/include
DYLD_LIBRARY_PATHMac 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 参数

凡事预则立 不预则废