我試圖在SCons中獲得一個分層構建。目錄結構是這樣的:在SConscript文件之間傳遞目標
code/SConstruct
code/src/SConscript
code/src/main.c
code/src/foo.c
code/src/bar.c
code/src/tests/SConscript
code/src/tests/test_foo.c
code/src/tests/test_bar.c
測試_ * C需要鏈接到實現他們測試函數的C文件,因此test_foo.c有鏈接到foo.c對於例子。因此,src/SConscript必須將許多目標返回到src/tests/SConscript,以便它可以構造二進制文件(每個測試1個)。我的問題是使用Return()函數完成此操作的最佳方法是什麼?我想要返回的文件的順序無關緊要,所以一個元組將不會執行。我的想法是構造一個字典,其中的鍵是文件名。我想檢查一下沒有更好的方法來做到這一點;也許我可以構造不同的文件,以促進更清潔的構建?
由於提前,
我也有類似的情況,但我的目錄結構扁平化:只是'SRC /'和'的src /測試'。麻煩的是,我想'#src/foo.c'構建在一個變體目錄中,但是它構建在'src /'中。我的頂級SConstruct調用'SConscript('test/SConscript',variant_dir ='build',exports ='env',duplicate = 0)'。 test/SConscript調用'env.Program(target ='test_foo',['test_foo.c','#src/foo.c'])''。 當我建立時,我得到'src/build/test_foo','src/build/test_foo.o',這是正確的。但是我得到'src/foo.o'而不是'src/build/foo.o'。我究竟做錯了什麼? – cklin 2013-09-20 23:24:47
@cklin,聽起來像'foo.c'正在爲src正確構建,但是正在爲'test_foo'重新構建。嘗試在構建'test_foo'時引用'foo.o',如下所示:env.Program(target ='test_foo',['test_foo.c','#src/build/foo.o')) – Brady 2013-09-21 13:10:17