【发布时间】:2018-08-11 22:43:06
【问题描述】:
情况
我正在使用手写的 GNUmakefile,其中 CXXFLAGS、CPPFLAGS 和 LDFLAGS 由 += 赋值附加,如:
CXXFLAGS += -std=c++11 $(MODENV) $(WARNINGS) $(OPTIMS)
CPPFLAGS += $(DMACROS) $(INCDIRS)
LDFLAGS += $(MODENV) $(LIBDIRS) $(EXTRA_LIBS)
问题
当用户在命令行定义自己的标志时,Makefile 中的附加将被忽略。这使变量完全由用户设置。 (在我的情况下,构建将失败。)这个问题的通用解决方案是override the variables,如:
override CXXFLAGS += -std=c++11 $(MODENV) $(WARNINGS) $(OPTIMS)
override CPPFLAGS += $(DMACROS) $(INCDIRS)
override LDFLAGS += $(MODENV) $(LIBDIRS) $(EXTRA_LIBS)
这样,必要的内容将被附加到用户的变量中。
问题
- 覆盖变量是否被视为不好的做法?
- 在 Makefile 中设置上述标志是否被视为不好的做法?
- 如果上述两个问题都“是”,那么我应该把
-std=c++11放在哪里,如果不是放在CXXFLAGS中?
【问题讨论】:
-
如果您的构建在没有给定标志的情况下失败,那么这是完全可以接受的,尽管如果有人乱用构建标志,如果他们想进行更改,您不妨要求他们自己编辑 makefile。跨度>