CMake中的“set”语法

问题描述 投票:4回答:2

我正在尝试从http://www.cmake.org/cmake-tutorial/学习CMake。我不遵循set语法的工作方式。例如,从本教程中,

set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)

我能理解,在这里我们要将MathFunctions分配给EXTRA_LIBS变量。但令我困惑的是为什么我们想拥有EXTRA_LIBS ${EXTRA_LIBS}。为什么不呢

set (EXTRA_LIBS MathFunctions)

而且,我用以下代码测试

set (VALUE_1 "value 1")  # A
set (VALUE_2 ${VALUE_2} "value 2")  # B

message("value 1:" ${VALUE_1})
message("value 2:" ${VALUE_2})

在这种情况下,#A和#B都产生相同的结果格式。

所以我的问题是#A和#B之间有什么区别?

syntax cmake set
2个回答
6
投票

So my question is what is difference between # A and # B

在第一种情况下#A你将"value 1"分配给变量VALUE_1,但在第二种情况下,你赋予变量VALUE_2已经存在的这个变量的值与"value 2"连接。

例如:

set (VALUE_1 "default value")
set (VALUE_2 "default value")

set (VALUE_1 "value 1")  # A
set (VALUE_2 ${VALUE_2} "value 2")  # B

message("value 1:" ${VALUE_1})
message("value 2:" ${VALUE_2})

输出:

...
value 1:value 1
value 2:default valuevalue 2
...

另一个词是第二种情况是修改已存在的变量的方法。

当您不想覆盖现有值时,它会很有用,例如:

MainProject /的CMakeLists.txt:

set (CXX_COMPILER_FLAG "some optimization flags")
add_subdirectory (SubProject)

MainProj /子项目/的CMakeLists.txt:

set (CXX_COMPILER_FLAG "some warning flags") #<- wrong, overwrite flags.
set (CXX_COMPILER_FLAG "${CXX_COMPILER_FLAG} some warning flags") #<- correct, safe existed flags and add new flags.

0
投票
set (var_a "value a") # just like: var_a = "value a"
set (var_b ${var_b} "value b") # just like: var_b = var_b + "value b"
© www.soinside.com 2019 - 2024. All rights reserved.