GNU Make 4.3默认规则问询:内置命令、变量及存储位置
GNU Make 内置规则与变量问题解答
1. 查看完整内置规则列表
使用make -p -f /dev/null命令即可打印所有内置规则和变量。其中:
-p参数用于输出当前所有生效的规则、变量定义-f /dev/null指定加载空的Makefile,避免本地自定义Makefile干扰,只显示GNU Make自带的内置内容
执行该命令后,你会看到类似你期望的规则格式,比如:
%.o: %.c $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< %.o: %.cpp $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<
2. 内置规则中的其他变量
除了你熟悉的CFLAGS(C编译选项)、CXXFLAGS(C++编译选项),内置规则常用的变量还有:
CPPFLAGS:C/C++预处理器选项,比如宏定义-Dxxx、头文件路径-IxxxLDFLAGS:链接器选项,比如库路径-Lxxx、链接模式参数LDLIBS:链接时需要链接的库文件,比如-lm(数学库)、-lpthread(线程库)TARGET_ARCH:针对目标架构的特殊编译选项CC:默认C编译器(通常指向系统的cc,实际多为gcc)CXX:默认C++编译器(通常指向g++)
这些变量会根据不同的内置规则组合使用,比如C程序的链接规则会是:
%: %.o $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
3. 默认规则的存储位置
GNU Make的默认规则是直接编译在程序源码中的,并非存储在外部配置文件里。不过你可以通过以下方式修改或补充规则:
- 在本地Makefile中自定义规则,覆盖内置规则
- 设置
MAKEFILES环境变量,指定全局配置文件,在所有Makefile执行前加载该文件中的规则
内容的提问来源于stack exchange,提问作者Eric Stdlib
相关产品推荐
相关产品推荐

