waf:嵌套项目和_cache.py:不支持?

时间:2013-12-04 09:36:34

标签: c++ python waf

我正在将一个项目从autotools转换为waf,希望它也可以在windows中轻松编译。

我正在使用一个带有两个子文件夹的超级项目,这是2个项目。

其中一个是图书馆,另一个是程序,如下:

  1. 上层项目/ WScript的
  2. 上层项目/ libraryproject / WScript的
  3. 上层项目/计划项目/ WScript的
  4. 似乎waf对子项目的支持很差。我在每个目录中都有一个wscript。

    我从superproject到其他两个项目,但是两个项目都共享_cache.py文件。这有以下副作用(问题):

    1. 使用boost工具时,我不得不像这样使用它来避免名称冲突:

      # In library project
      cfg.check_boost('boost_program_options', uselib_store='BOOST_LIBRARYPROJECT')
      
      # In program project
      cfg.check_boost('boost_program_options', uselib_store='BOOST_PROGRAMPROJECT')
      
      默认情况下,

      boost-libs和boost-includes命令行选项也会丢失,因此我必须手动设置它们,如下所示:

      cfg.env.LIBPATH_BOOST_PROGRAMPROJECT = cfg.options.boost_libs
      ...
      
    2. programproject / wscript覆盖了_cache.py文件,丢失了标志的所有配置

    3. 问题:

      1. 是否有任何好的方法来嵌套项目并至少避免问题2?
      2. 有没有合理的方法可以避免不需要脚本和单独构建项目?

1 个答案:

答案 0 :(得分:1)

配置文件未写入两次。

我的错误就是这样做:

cfg.env = ConfigSet()

我想要一个新的,干净的ConfigSet但是在两个项目中都这样做会使第一组标志丢失。

由于环境似乎在所有项目配置中共享,因此使用自定义名称命名变量是否很好?例如,而不是使用:

cfg.check_boost('program_options')

我应该使用:

cfg.check_boost('program_options', uselib_store='BOOST_MYPROGRAMPROJECT')
  1. 这是好风格还是通常以另一种方式完成?
  2. 可以以更清洁的方式完成导出ConfigSet s?