我有我在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'])
答案 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