我有一个用scons构建的现有C库(该库有自己的库)
SConscript)。此代码现在包含由#ifdef
控制的两个变体。怎么样
我告诉scons构建这个库的两个变种,可以生活在一起
方(因此应用程序可以链接到适当的变体)?
从概念上讲,它是这样的:
driver_sources = [ ... ]
env.Library('drivers', driver_sources)
env.Library('drivers_withflag', driver_sources,
CPPDEFINES += ['FLAG'])
SCons(可以理解)不喜欢使用相同的源列表 具有不同环境的输出,因为中间对象名称 冲突。
我不确定是否通过某种方式获得一个新问题来解决这个问题
drivers_withflag
对象的构建器,或者我是否应该包含我的库
SConscript两次带有一些参数来指定#defines
(我可以放
每个变体都在自己的构建目录中)。有什么建议吗?
答案 0 :(得分:1)
以下是一些相关文档的链接:http://www.scons.org/doc/1.1.0/HTML/scons-user/x1392.html
我认为它会像这样
driver_sources = [ ... ]
env.Library('libdrivers', driver_sources)
env_flag = env.Clone()
env_flag.Append(CPPDEFINES = ['FLAG'])
flag_objects = [os.path.splitext(src)[0] + '_flag' +
env['OBJSUFFIX'] for src in driver_sources]
d_wf = [env_flag.Object(tgt, src) for tgt,src in
zip(flag_objects, driver_sources)]
env_flag.Library(d_wf)
这将直接在您当前的SConscript文件中,但您也可以查看此问题:here
你可以使用在那里调用你的库的SConscript文件的任何文件中设置的步骤来设置两个环境,然后只需每次调用SConscript两次。
希望有所帮助。