SCONS env.Library() 未获得预期的环境编译标志
SCONS env.Library() does not get the expected environment compilation flags
我运行遇到以下问题:
我们有一个大型项目(继承自其他公司)编译了许多 SW.The 的子 mules,FW 的构造被细分为几个 SConscripts
我们从主 SConstruct 调用。关键是所有子模块共享相同的编译标志和
定义。
我打算用以下方法解决这个问题:
在主入口点,我们定义了某些编译选项的 SConstruct :
COMPILER_FLAGS = '-g \
-O3\
-f短双\
-gdwarf-2 \
-墙 \
-W\
-Werror-implicit-function-declaration \
-Wno-未使用的变量\
-没有空体\
-Wbad-function-cast \
-Wstrict-原型\
-Wmissing-noreturn \
-Wnested-externs \
-fno-内置\
-Wno-未使用的参数\
-Wno-pointer-to-int-cast \
..........
这个 COMPILER_FLAGS 存在作为参数传递给每个 Sconscript 的构建环境
然后在每个 Sconscript 中,我克隆环境并修改每个子模块的一些选项
*S构造
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')
重点是,当我为 logprint 子模块编译(并构建一个库)时,我没有看到 own_env 扩展
编译标志。我仍然在编译命令行中看到打印了从主 SConstruct 文件继承的初始环境选项。
为什么会发生这种情况?是否有任何顶级 SCONS option/configuration 设置此行为?
我还要强调一下,我从头开始在一个新的小项目中探索了 env.Clone 这个概念,然后它就出现了
作品。所以我想知道是否某些顶级 SCONS 配置可能会阻止我在 'large' 中想要的 own_env.Library 行为
项目。
以下内容应该可以满足您的要求。
S构造
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)
征兵
#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')
我运行遇到以下问题: 我们有一个大型项目(继承自其他公司)编译了许多 SW.The 的子 mules,FW 的构造被细分为几个 SConscripts 我们从主 SConstruct 调用。关键是所有子模块共享相同的编译标志和 定义。
我打算用以下方法解决这个问题:
在主入口点,我们定义了某些编译选项的 SConstruct :
COMPILER_FLAGS = '-g \ -O3\ -f短双\ -gdwarf-2 \ -墙 \ -W\ -Werror-implicit-function-declaration \ -Wno-未使用的变量\ -没有空体\ -Wbad-function-cast \ -Wstrict-原型\ -Wmissing-noreturn \ -Wnested-externs \ -fno-内置\ -Wno-未使用的参数\ -Wno-pointer-to-int-cast \ ..........
这个 COMPILER_FLAGS 存在作为参数传递给每个 Sconscript 的构建环境 然后在每个 Sconscript 中,我克隆环境并修改每个子模块的一些选项
*S构造
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')
重点是,当我为 logprint 子模块编译(并构建一个库)时,我没有看到 own_env 扩展 编译标志。我仍然在编译命令行中看到打印了从主 SConstruct 文件继承的初始环境选项。
为什么会发生这种情况?是否有任何顶级 SCONS option/configuration 设置此行为? 我还要强调一下,我从头开始在一个新的小项目中探索了 env.Clone 这个概念,然后它就出现了 作品。所以我想知道是否某些顶级 SCONS 配置可能会阻止我在 'large' 中想要的 own_env.Library 行为 项目。
以下内容应该可以满足您的要求。
S构造
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)
征兵
#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')