我正在使用GNU make编译我的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 $@
我很确定这里没有错误;Makefile效果很好。但是有什么违背约定的东西吗(例如CCFLAGSINT
-我应该改写CCFLAGS
吗?还是CXXFLAGS
FUD!)
很抱歉有这么多问题;您显然不会全部回答,但我希望答案会帮助我理解这些设置背后的一般想法。
gcc
或未由或clang
编译器本身使用吗?