2011-10-07 64 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