2016-03-13 45 views
1

我確實有一個項目帶有一個選項,用於生成相關的可執行文件,這些可執行文件在較低級別的子目錄中生成,而較高級別的CMakeLists.txt將選項設置爲ON或OFF。對於分發,我需要可執行文件(具有與選項有關的名稱)用於ON和OFF狀態。目前,我設置了選項,運行CMake,設置選項,運行CMake。如果我使用如下所示的內容,是否安全(主要考慮緩存和線程)?在CMake文件中打開和關閉選項的安全性如何?

選擇ON

包括(產生)

選擇OFF

包括(產生)

回答

1

通常情況下,它應該不緩存工作:

set(<option> ON) 
include(generate) 

set(<option> OFF) 
include(generate) 

線程不會在任何情況下出現問題,因爲解釋CMake腳本(配置階段)是單線程建立階段相反。

使用option()命令而不是set()將不起作用,因爲option()不會修改變量,如果它已被設置在緩存中。

您可以使用set(<option> <value> CACHE ...)而不是set(<option> <value>),但通常不需要增加複雜度,除非generate腳本明確檢查緩存的選項的值。

注意,那generate腳本應該不僅是「有依賴期權的名字」,但也不能創建緩存條目取決於<option>值。否則,使用不同選項調用腳本兩次會被中斷。

+0

嗯,在構建階段,我看到組件以交錯方式編譯,最終結果是我有兩個相同的副本,名稱不同。兩個版本之間沒有衝突,但只有第一組()是有效的。 – katang

+0

嗯,你的'generate'腳本是否使用'add_definitions','include_directories'或類似的命令?這些命令分配當前變量,這會影響目錄中內置的* all *可執行文件。 – Tsyvarev

+0

我使用useinclude_directories,但它們對於兩個版本都是相同的。 – katang

相關問題