【发布时间】:2016-07-08 17:00:52
【问题描述】:
我在 waf 脚本中使用 bld.program() 的 includes=... 参数指定了 C++ 头文件依赖项。
我知道 waf 构建配置会看到包含,因为我的程序编译正确。
但是,当我更改头文件时,waf 不会检测到更改。也就是说,当我在更改包含的标头的内容后运行 waf build 时,不会重新编译任何内容。
waf 不应该自动确定#include "..." 依赖关系吗?
我该如何解决这个问题?
我查看了 build/c4che 目录,看看是否可以理解存储在那里的配置文件。在 waf 生成的 .py 文件中提到“include”是可疑的。
我使用的是 1.9.0 版的 waf。
我也用 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'])
【问题讨论】:
-
显然不是 C++ 问题。对于直接的 GNU make 构建系统,
-M<x>选项用于生成可以被 Makefile 包含的头依赖文件。 -
我的断言是 waf 的问题,而不是 C++ 的问题。我不想使用 -MM 在 Makefile 中生成依赖项,这就是我使用 waf 的原因。
-
我还不确定为什么您的示例不起作用,我正在尝试查看文档是否可以阐明。 waf.io/book/#_include_processing
-
@jsp 你的包含有什么奇怪的地方吗,它们是嵌套的吗?
-
@leetNightshade 不,我不这么认为。 wscript 位于 ./tests 中。 ./tests/test.cpp 包括 ./include/inc.h。 ./include/inc.h 仅包含标准头文件。
标签: waf