用scons构建库变体

时间:2010-11-30 01:10:03

标签: scons

我有一个用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(我可以放 每个变体都在自己的构建目录中)。有什么建议吗?

1 个答案:

答案 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两次。

希望有所帮助。