我確實有一個項目帶有一個選項,用於生成相關的可執行文件,這些可執行文件在較低級別的子目錄中生成,而較高級別的CMakeLists.txt將選項設置爲ON或OFF。對於分發,我需要可執行文件(具有與選項有關的名稱)用於ON和OFF狀態。目前,我設置了選項,運行CMake,設置選項,運行CMake。如果我使用如下所示的內容,是否安全(主要考慮緩存和線程)?在CMake文件中打開和關閉選項的安全性如何?
選擇ON
包括(產生)
選擇OFF
包括(產生)
我確實有一個項目帶有一個選項,用於生成相關的可執行文件,這些可執行文件在較低級別的子目錄中生成,而較高級別的CMakeLists.txt將選項設置爲ON或OFF。對於分發,我需要可執行文件(具有與選項有關的名稱)用於ON和OFF狀態。目前,我設置了選項,運行CMake,設置選項,運行CMake。如果我使用如下所示的內容,是否安全(主要考慮緩存和線程)?在CMake文件中打開和關閉選項的安全性如何?
選擇ON
包括(產生)
選擇OFF
包括(產生)
通常情況下,它應該不緩存工作:
set(<option> ON)
include(generate)
set(<option> OFF)
include(generate)
線程不會在任何情況下出現問題,因爲解釋CMake腳本(配置階段)是單線程與建立階段相反。
使用option()
命令而不是set()
將不起作用,因爲option()
不會修改變量,如果它已被設置在緩存中。
您可以使用set(<option> <value> CACHE ...)
而不是set(<option> <value>)
,但通常不需要增加複雜度,除非generate
腳本明確檢查緩存的選項的值。
注意,那generate
腳本應該不僅是「有依賴期權的名字」,但也不能創建緩存條目取決於<option>
值。否則,使用不同選項調用腳本兩次會被中斷。
嗯,在構建階段,我看到組件以交錯方式編譯,最終結果是我有兩個相同的副本,名稱不同。兩個版本之間沒有衝突,但只有第一組()是有效的。 – katang
嗯,你的'generate'腳本是否使用'add_definitions','include_directories'或類似的命令?這些命令分配當前變量,這會影響目錄中內置的* all *可執行文件。 – Tsyvarev
我使用useinclude_directories,但它們對於兩個版本都是相同的。 – katang