我正在尝试从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 /子项目/的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.