"set" CMake 中的语法
"set" syntax in CMake
我正在尝试从 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 之间有什么区别?
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/SubProject/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.
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"
我正在尝试从 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 之间有什么区别?
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/SubProject/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.
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"