2011-10-07 91 views
0

我们的项目包含了很多C++源代码,直到现在我们都唱歌制作一切,但这需要很长时间。所以我偶然发现了waf,它工作得很好,加速了构建。然而,每次我做一个完整的构建时,我都会遇到一些没有意义的构建错误。如果我现在进行增量构建,大部分时间都是第一次无法构建的源代码现在正在构建,其他一些仍然失败。在另一个增量构建中,我将最终获得成功构建。Waf在C++版本上抛出错误

我试过在单独的步骤中构建单独的库,以防万一任何相关库试图并行构建,但错误仍然出现。

编辑:我不断收到的错误似乎与我的代码没有任何关系,例如,

Build failed 
-> task failed (exit status -1): 
     {task 10777520: c constr_SET.c -> constr_SET.c.1.o} 

继另一个“waf build”之后,我再也没有遇到这个错误。

EDIT2:我的库构建步骤如下:

def build(bld): 
    bld.shlib(source="foo.cpp bar.cpp foobar.cpp constr_SET.c", 
    target="foobar", 
    includes= "../ifinc", 
    name="foobar", 
    use="MAIN RW HEADERS", 
    install_path = "lib/") 

MAIN,RW,头部只是一些标志和外部的库,我们使用。

有没有人在他们的系统上看到类似的行为?甚至是解决方案?

+0

你显然没有得到正确的依赖关系(可能链接步骤)。但是你没有举出一个例子,甚至没有发现错误,所以我们不能帮忙。 – sehe

+0

你当然是对的,用一个例子更新。这很可能是一个依赖关系的问题,但是,在构建我们的共享库期间,这些错误不断出现,它们之间没有任何依赖关系(我们将头文件复制到中央目录以避免依赖关系)。 – pushy

回答

1

我怀疑多个目标是并行构建相同的所需对象。尝试

export JOBS=1 

waf --jobs 1 
+0

好吧,你现在在,如果我减少错误消失的工作数量。但是我做错了什么?我把我的wscript的(有希望的)相关部分放到问题文本中。 – pushy

+1

我认为你应该显示编译constr_SET.c的规则,_and/or_使用constr_SET.o。我假设超过1个二进制文件链接到了constr_SET.o,并且正在按需构建它 - 同时。在这种情况下,最好明确依赖constr_SET.o,这样Waf可以知道依赖关系并序列化依赖规则。 – sehe

+0

基本上,constr_SET.c文件是我们库的源文件之一。所以上面的配置是源代码编译的地方,因为我们的库不相互依赖,所以在lib构建阶段,源码不会在任何地方使用。后来,当我们的进程被构建时,我们依赖于lib,但是我把库和进程的构建放到了不同的构建组中,所以我想这样的副作用不应该发生...... – pushy

相关问题