2017-10-14 75 views
1

我想從CMake變量中刪除特定的庫。刪除變量的特定部分

假設LIB包含變量「A; B; C」的值, 我知道使用set添加另一個變量「d」的comtent這樣

set(LIB ${LIB};D) 

但是我試圖除去「 C「from LIB like following

unset(LIB C) 

此代碼無效。 有沒有人知道這樣做的好方法?

回答

2

這不是unset的工作原理。在你的例子中,unset(LIB C)取消設置變量LIBC。它不會從LIB中刪除C部分。因爲所有變量都是CMake內部的字符串,所以應該使用string(REPLACE)。在你的情況

string(REPLACE C "" LIBwithoutC LIB) 

用一個空字符串替換的C所有出現並將結果在LIBwithoutC。您可能需要對此進行微調以刪除額外的分號。

+1

嘗試了幾次後,我發現 '字符串(替換 「C」; 「」 LIBwithoutC 「$ {} LIB」)' 作品。使用「$ {LIB}」可以將這些變量作爲字符串處理。 https://cmake.org/pipermail/cmake/2016-January/062594.html –

-2

有你可能已經知道至少在三個方面:

run cmake-gui (or make edit_cache) to open the "cache editor", i.e. the GUI for cmake 
the "Holzhammer" method: simply remove the complete cache or build directory and start again 
and delete the entries you don't want there 
open CMakeCache.txt in a text editor and edit it manually 

還有另一種方式做,你也許還不知道。 除了「-D」(定義變量),cmake還有「-U」(undefine變量),您可以使用它來從緩存中刪除條目。 它是這樣的:$ cmake -U * QT *。