2012-08-02 89 views
0

我與SCons的目標函數有點混淆。我目前正在嘗試創建一個簡單的目標check以啓動位於我的tests文件夾中的Boost.Test套件。爲了啓動所有測試,我有一個tests/SConscript文件,其中我通過簡單地調用Program方法來註冊包含我的測試的cpp文件。SCons:將目標鏈接到SConscript

我只是想告訴SCons的,他需要調用tests/SConscript文件,如果目標check要求,否則,簡單地通過調用src/SConscript

$> scons check 

回答

1

正如您的回答中所述,您可以使用SCons Alias()函數爲一個或多個目標指定一個名稱,但如果您僅執行scons而未指定目標,則不會告知SCons何時構建目標。當你不指定任何目標時,你會注意到單元測試將被構建和/或執行。

要告訴SCons應該構建什麼,您可以使用SCons Default() function。當你不使用這個功能時,每個目標都會默認生成:顯然只有那些需要建立的目標,根據依賴關係等等。

默認情況下,只需要在你的src/SConscript中構建目標,一個庫,您可以執行以下操作:

libTarget = env.Library('yourLib', theSourceFiles) 
env.Default(libTarget) 

您可以對幾個不同的目標使用Default()函數。

現在當您執行scons沒有任何目標時,只會創建使用Default()函數設置的目標。如果你執行scons check,那麼檢查目標及其相關性將被建立(假設你用檢查目標調用了Alias(),並且還沒有將檢查目標稱爲Default())

+0

謝謝,這幫了我很多!我沒有找到這個問題來自哪裏。現在工作正常 – Rippalka 2012-08-03 16:35:58

+0

@Rippalka,很高興聽到它爲你工作,高興地幫助。 – Brady 2012-08-03 16:49:15

0

我要回答籌建方案我自己的問題。從我所看到的,你可以使用SCons中的別名將Builder綁定到rule

我讀過克里斯福斯特在這個地址後:http://www.scons.org/wiki/UnitTests想出以下的想法:

因爲我們要添加的每個測試中,我們將它添加到check目標是這樣的:

prog = env.Program(...) 
env.Alias('check', prog) 
env.Alias(nameOfTheTest, prog) 

這樣一來,我可以調用兩種不同的方式在我的測試:

$> scons check    # Calls all the tests of the suite 
$> scons nameOfTheTest  # Only calls the test we added 

希望有所幫助。謝謝

+0

這將在將目標指定爲構建,但問題是,如果你不指定目標,這些目標也會建立。也就是說,只是執行「scons」會導致這些目標被建立,這是你說你不想要的東西。我添加了一個解釋如何得到您想要的行爲的答案。 – Brady 2012-08-03 08:10:35