有没有办法写这样的东西:
scons CFLAGS='-fsanitize=address -fsanitize=thread'
只需一个最小的脚本即可>
env = Environment()
env.Program(target='main.out', source=['main.c'])
不更改该脚本?
我知道如何通过使用AddOption
+ env.Append(CCFLAGS
修改脚本来做到这一点,但我想知道是否有可能在不更改代码的情况下明确支持它。
答案 0 :(得分:1)
这在设计上是不可能的(无需显式更改构建脚本)。从我们的FAQ中最常见的问题的答案#1:
SCons不会自动传播所使用的外部环境 对用于生成目标文件的命令执行“ cons”。这是 这样一来,无论 调用scons时设置的环境变量。这也是 表示如果要使用的编译器或其他命令 建立目标文件不在标准系统位置,SCons 将不会找到它们,除非您明确设置PATH以包括这些 位置。
答案 1 :(得分:0)
我最终选择了:
env = Environment()
env.Append(CCFLAGS='-Werror')
env.Append(CCFLAGS=ARGUMENTS.get('CCFLAGS', ''))
env.Program(target='main.out', source=['main.c'])
可以用作:
scons CCFLAGS='-Wall -pedantic'
,并将编译为:
gcc -o main.o -c -Werror -Wall -pedantic main.c
您可能希望保留env.Append(CCFLAGS=ARGUMENTS.get('CCFLAGS', ''))
行作为对CCFLAGS
所做的最后一次更改,因为这将允许覆盖命令行上的默认值:GCC倾向于仅使用显示为实际的。
TODO:如何使其与变量一起使用?这样会更好,因为我们可以获得更多的错误检查和帮助消息的生成:
variables = Variables(None, ARGUMENTS)
variables.Add('CCFLAGS', 'my help', '')
env = Environment(variables)
env.Append(CCFLAGS='$CCFLAGS')
env.Append(CCFLAGS=['-Werror'])
env.Program(
source=['main.c'],
target='main.out',
)
Help(variables.GenerateHelpText(env))
但是由于引用错误而失败:
gcc -o main.o -c "-Wall -pedantic" -Werror main.c