Syntax &引用;“设置”;CMake中的语法
我正在努力学习CMake。我不明白Syntax &引用;“设置”;CMake中的语法,syntax,cmake,set,Syntax,Cmake,Set,我正在努力学习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 se
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之间的区别是什么 在第一种情况下,
#A
将值1
分配给变量值1
,但在第二种情况下,将变量值2
分配给该变量的已存在值,该值与值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(CXX_编译器_标志“某些警告标志”)#set(var_a“值a”)#就像:var_a=“值a”
设置(var_b${var_b}“value b”)#就像:var_b=var_b+“value b”
这样,EXTRA_LIBS
将被设置为其当前值并添加MathFunctions
。例如,如果EXTRA_-LIBS
是foo-bar
则set(EXTRA-LIBS${EXTRA-LIBS}MathFunctions)
扩展为set(EXTRA-LIBS foo-bar-MathFunctions)
从而将EXTRA-LIBS
设置为foo-bar-MathFunctions
。