Makefile FAQs
Makefile 小记
CXXFLAGS
编译 Memtis/silo benchmark 时,一个宏定义一直找不到
1 | macros.h:32:2: error: #error "no CONFIG_H set" |
检查 Makefile,CONFIG_H
有定义且路径正确,并且已经通过 CXXFLAGS += -DCONFIG_H=\"$(CONFIG_H)\"
传递给编译器,十分奇怪。
打印调试输出。
1 | $(info CXXFLAGS are $(CXXFLAGS)) |
这下明白了,我执行的 make 命令为 make CXXFLAGS+="-Wno-error=deprecated-declarations"
,Makefile 中定义的 CXXFLAGS
被覆盖。把命令行参数去掉后再打印 CXXFLAGS
,与 Makefile 中定义一致。
此时还要处理另一个问题
1 | cc1plus: all warnings being treated as errors |
无法从命令行传递 -Wno-error=deprecated-declarations
,则直接在 Makefile 中:
1 | CXXFLAGS += -Wno-deprecated-declarations |
再编译,终于成功。
Appendix
include
: 如果文件不存在会导致make
报错。-include
: 如果文件不存在,make
会忽略这个文件并继续执行。-j
: 启用并行构建
Werror
有时编译器会报如下两种类型的 warnings ( treated as error )
[Werror=err_name]
[Werr_name]
在 CXXFLAGS
中分别构造 FLAG,关闭即可[1]
1 | CXXFLAGS += -Wno-error=stringop-overflow -Wno-stringop-overflow |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Miya's Blog!
评论