问题描述:

I have C++ header file dependencies that I specify in my waf script with the includes=... parameter to bld.program().

I know the waf build configuration sees the includes because my program compiles correctly.

However, when I change a header file, waf does not detect the change. That is, when I run waf build after changing the contents of an included header, nothing gets recompiled.

Isn't waf supposed to determine #include "..." dependencies automatically?

How can I troubleshoot this?

I have looked in the build/c4che directory to see if I could make sense of the configuration files stored there. Mention of "include" in the waf generated .py files is suspiciously absent.

I am using waf version 1.9.0.

I have also tried this with waf 1.8.19 and got the same result.

EDIT: I replaced my original complicated wscript with the much simpler one listed below, and I still get the same behavior.

Here is my 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'])

网友答案:

Your problem is that you use includes out of the project's directory. By default waf does not use external includes as dependencies (like system includes) to speed up things. Solutions I know of :

1/ Organize your project to have your include directory under the waf top directory :

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

2/ Change top directory. I think top = .. should work (not tested).

3/ Tell waf to go absolute by adding this lines at the beginning of build():

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

4/ Use gcc dependencies by loading the gccdeps waf module.

Solution 1/ is probably the best.

By the way I prefer to have my build directory out of the source tree. Use out = ../build in your wscript, if you want to build out of the source tree.

my2c

相关阅读:
Top