删除变量的特定部分

Y. *_* Ri 5 cmake

我想从 CMake 变量中删除特定的库。

假设LIB包含变量“A;B;C”的值,我知道set可以像这样添加另一个变量“D”的内容

set(LIB ${LIB};D)
Run Code Online (Sandbox Code Playgroud)

但是我尝试从LIB以下内容中删除“C”

unset(LIB C)
Run Code Online (Sandbox Code Playgroud)

这段代码不起作用。有谁知道这样做的好方法?

usr*_*567 6

事情不是这样的unset。在您的示例中,unset(LIB C)取消设置变量LIBC。它不会C从 中删除该部件LIB

由于所有变量都是 CMake 中的内部字符串,因此您应该使用string(REPLACE). 在你的情况下

string(REPLACE C "" LIBwithoutC LIB)
Run Code Online (Sandbox Code Playgroud)

将所有出现的 替换C为空字符串并将结果存储在 中LIBwithoutC。您可能需要对此进行微调以删除多余的分号。

  • 经过多次尝试,我发现 `string(REPLACE "C;" "" LIBwithoutC "${LIB}") ` 有效。使用“${LIB}”可以将这些变量视为字符串。https://cmake.org/pipermail/cmake/2016-January/062594.html (3认同)