gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:15:02 26 4
gpt4 key购买 nike

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

我正在使用一个带有两个子文件夹的 super 项目,它们是 2 个项目。

其中一个是库,另一个是程序,如下所示:

  1. super 项目/wscript
  2. super 项目/库项目/wscript
  3. super 项目/程序项目/wscript

看来waf对子项目的支持很差。我在每个目录中都有一个 wscript。

我从 super 项目递归到其他 2 个项目,但是 _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. _cache.py 文件被 programproject/wscript 覆盖,丢失所有标志配置

问题:

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

最佳答案

配置文件没有写两次。

我的错误是这样做:

cfg.env = ConfigSet()

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

由于环境似乎在所有项目配置之间共享,所以用自定义名称命名变量是一种很好的风格吗?例如,而不是使用:

cfg.check_boost('program_options')

我应该使用:

cfg.check_boost('program_options', uselib_store='BOOST_MYPROGRAMPROJECT')
  1. 这是好的风格还是通常以其他方式完成?
  2. 能否以更简洁的方式派生 ConfigSet

关于c++ - waf:嵌套项目和 _cache.py:不支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20371693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com