waf没有正确检测C ++ #include依赖项

时间:2016-07-06 19:06:17

标签: waf

我有我在waf脚本中指定的C ++头文件依赖项,其中includes=...参数为bld.program()。

我知道waf构建配置会看到包含,因为我的程序编译正确。

但是,当我更改头文件时,waf没有检测到更改。也就是说,当我在更改包含标题的内容后运行waf build时,不会重新编译任何内容。

不应该确定#include" ..."依赖自动?

我该如何解决这个问题?

我查看了build / c4che目录,看看我是否能理解那里存储的配置文件。提及"包括"在waf中生成的.py文件可疑地缺席。

我使用的是waf版本1.9.0。

我也尝试过使用waf 1.8.19并得到相同的结果。

编辑:我用下面列出的更简单的wscript替换了原来复杂的wscript,我仍然得到了同样的行为。

这是我的文字:

top = '.'
out = 'build'
CXXFLAGS = ['-fopenmp', '-Wall', '-Werror', '-std=c++11', '-Wl,--no-as-needed']

def options(ctx):
    ctx.load('compiler_cxx')

def configure(ctx):
    ctx.load('compiler_cxx')
    ctx.env.CXXFLAGS = CXXFLAGS

def build(ctx):
    ctx.program(source="test_config_parser.cpp", target="test_config_parser", includes=["../include"], lib=['pthread', 'gomp'])

1 个答案:

答案 0 :(得分:2)

您的问题是您在项目目录中使用了包含。默认情况下,waf不使用外部包含作为依赖项(如系统包含)来加快速度。我知道的解决方案:

1 / 组织您的项目,使您的包含目录位于waf顶级目录下:

top_dir/
    wscript
    include/
        myinclude.h
    sources/
         mysource.cpp 

2 / 更改顶级目录。我认为top = ..应该有效(未经测试)。

3 / 通过在build()开头添加这些行来告诉waf绝对:

waflib.Tools.c_preproc.go_absolute=True
waflib.Tools.c_preproc.standard_includes=[]

4 / 通过加载gccdeps waf模块来使用gcc依赖项。

解决方案1 ​​/可能是最好的。

顺便说一句,我更喜欢将我的构建目录放在源代码树之外。如果您想构建源树,请在out = ../build中使用wscript

MY2C