我正在使用GNU-make Makefile来构建一个包含多个目标的C项目( all
, clean
和一些项目特定目标) . 在调试过程中,我想在没有永久编辑Makefile的情况下将一些标志附加到单个构建中(例如添加调试符号或设置预处理器标志) .
在过去,我做了如下(使用调试符号示例):
make target CFLAGS+=-g
不幸的是,这并没有附加到 CFLAGS
变量,而是清除它并阻止它编译 . 有没有一种干净的方法来做到这一点,而没有定义附加到 CFLAGS
和 LDFLAGS
末尾的某种虚拟变量?
4 回答
看看override directive . 你可能需要修改一次makefile,但它应该做你想要的 .
示例makefile:
示例命令行:
为了记录,从命令行的角度来看,@ Carl Norum的答案会预先考虑变量 .
我需要一种方法来实际追加并提出:
传递变量有两种方法:
或(更好,因为它只改变当前命令的环境)
它们略有不同 . 第一个更强 . 这意味着你知道自己想要什么 . 第二个可能被视为暗示 . 它们之间的区别在于运算符
=
和+=
(没有override
) . 在命令行上定义变量时会忽略这些运算符,但在环境中定义变量时不会忽略这些运算符 . 因此,我建议您使用Makefile:并称之为:
注意,如果要撤销
-Wall
,可以使用:请不要使用
override
关键字,否则您将无法更改受override
影响的变量 .只是一个注释,因为我感到困惑 - 让这个文件
testmake
:然后:
从
testmake
文件中删除override
指令:所以,
如果一个变量使用
override
一次,它只能附加另一个带override
的语句(正常的赋值将被忽略);什么时候根本没有
override
;尝试从命令行追加(如在+=
中)将覆盖该变量的每个实例 .