最佳答案
我正在使用 GNUmake 来编译我的 C + + 代码,我想了解如何使我的编译可定制。
我在不同的地方读到,CFLAGS
,CCFLAGS
和 CXXFLAGS
都用于这个目的。那我该怎么用呢?如果我有额外的命令行参数到编译器,我应该追加到 CFLAGS
或预置它们?有什么常见的做法吗?
为什么是三个不同的变量?我认为 C 编译器应该得到 CFLAGS
和 CCFLAGS
,而 C + + 编译器应该得到 CFLAGS
和 CXXFLAGS
-我做对了吗?
人类用户是否应该设置这些变量?有没有自动工具(automake
、 autoconf
等)来设置它们?我应该使用的 linux 系统没有定义任何这些变量-这是典型的吗?
目前我的 Makefile 看起来像这样,我觉得它有点脏:
ifdef code_coverage
GCOV_FLAG := -fprofile-arcs -ftest-coverage
else
GCOV_FLAG :=
endif
WFLAGS := -Wall
INC_FLAGS := -Istuff -Imore_stuff -Ietc
CCFLAGSINT := -O3 $(WFLAGS) $(INC_FLAGS) $(CCFLAGS)
... (somewhere in the makefile, the command-line for compilation looks like this)
$(CC) $(CCFLAGSINT) -c $< -o $@
... (somewhere in the makefile, the command-line for linking looks like this)
$(CC) $(GCOV_FLAG) $(CCFLAGSINT) $(OBJLIST) $(LDFLAGS) -o $@
我非常肯定这里没有 bug; Makefile 工作得非常好。但是有没有什么东西是违反惯例的(比如 CCFLAGSINT
-我是不是应该改写 CCFLAGS
呢?或者 CXXFLAGS
?FUD!)
很抱歉有这么多问题,你显然不会全部回答,但我希望这些答案能帮助我理解这些设置背后的大致思路。