SCONS env.Library()未获得预期的环境编译标志

时间:2018-10-10 15:42:33

标签: scons

我正在运行以下问题: 我们有一个大项目(继承自其他公司),编译了SW的许多子项。FW的构造细分为几个SConscripts 我们从主SConstruct调用。关键是所有子模块共享相同的编译标志,并且 定义。

我打算通过以下解决方案解决这个问题:

在主入口点SConstruct中,我们定义了某些编译选项:

COMPILER_FLAGS ='-g \                           -O3 \                           -fshort-double \                           -gdwarf-2 \                           -墙\                           -W \                           -隐式函数声明                           -未使用的变量                           -空的身体                           -坏功能播                           -严格原型                           -不退不换\                           -Wnested-externs \                           -fno-builtin \                           -未使用参数                           -Won-pointer-int-cast \               ..........

此COMPILER_FLAGS提供了构造环境,该构造环境作为参数传递给每个Sconscript 然后在每个脚本中克隆环境,并为每个子模块修改一些选项

* SConstruct

log_path    = os.path.join('../../CDD/LogPrint/Build/logprint.SC')
objects += SConscript(log_path, exports='env', variant_dir=log_build_dir, duplicate=1)
dbg_exe     = env.Program(dbg_path, objects)

* logprint.SC

\#Customize Compilation options for this component
own_env = env.Clone()
own_env['COMPILER_FLAGS'] += '-O0 '

\# COMPILE SOURCE FILES
objects += own_env.Library(sources)

\# RETURN                     
Return('objects')

问题是,当我为日志打印子模块编译(并构建一个库)时,我没有看到own_env扩展 编译的标志。我仍然在编译命令行中看到从主SConstruct文件继承的初始env选项。

为什么会发生这种情况?是否有任何顶级SCONS选项/配置设置此行为? 我还要强调一点,我从头开始在一个新的小项目中探讨了env.Clone的概念。 作品。所以我想知道某些顶级SCONS配置是否可能阻止了own_env.Library的行为 项目。

1 个答案:

答案 0 :(得分:0)

以下内容应该可以完成我认为您想做的事情。

SConstruct

env=Environment()
env['CCFLAGS'] ='-g -O3 -fshort-double -gdwarf-2 -Wall -W -Werror-implicit-function-declaration -Wno-unused-variable -Wno-empty-body -Wbad-function-cast -Wstrict-prototypes -Wmissing-noreturn  -Wnested-externs -fno-builtin -Wno-unused-parameter -Wno-pointer-to-int-cast'
log_path = os.path.join('../../CDD/LogPrint/Build/logprint.SC')
objects = SConscript(log_path, exports='env', variant_dir=log_build_dir, duplicate=1)
dbg_exe = env.Program(dbg_path, objects)

SConscript

#Customize Compilation options for this component
own_env = env.Clone()
own_env.Append('CCFLAGS' = '-O0 ')

# COMPILE SOURCE FILES
objects = own_env.Library(sources)

# RETURN                     
Return('objects')