CMake基础篇(五)——宏 前言: 本篇文章帮助你快速熟悉CMake宏的使用。
1 用法 CMake的宏原理和c/c++相同,本质都是替换。以下代码说明了宏的参数是字符串替换的特点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 project (ProjectName)macro (PrintAndModifyMacro var) message (STATUS "Macro before: var = ${var}" ) set (var "Modified by Macro" ) message (STATUS "Macro after: var = ${var}" ) endmacro ()function (PrintAndModifyFunction var) message (STATUS "Function before: var = ${var}" ) set (_internalVar "Modified by Function" ) set (var "${_internalVar}" PARENT_SCOPE) message (STATUS "Function after: var (internal) = ${_internalVar}" ) endfunction ()set (testVar "Original Value" )message (STATUS "Before Macro: testVar = ${testVar}" )PrintAndModifyMacro(${testVar} ) message (STATUS "After Macro: testVar = ${testVar}" )set (testVar "Original Value Again" )message (STATUS "Before Function: testVar = ${testVar}" )PrintAndModifyFunction(${testVar} ) message (STATUS "After Function: testVar = ${testVar}" )
输出结果为。
1 2 3 4 5 6 7 8 -- Before Macro: testVar = Original Value -- Macro before: var = Original Value -- Macro after: var = Modified by Macro -- After Macro: testVar = Modified by Macro -- Before Function: testVar = Original Value Again -- Function before: var = Original Value Again -- Function after: var (internal) = Modified by Function -- After Function: testVar = Modified by Function
CMake的宏是替换,因此宏没有自己的作用域,宏中定义的变量等于在调用位置定义变量。
1 2 3 4 5 6 7 8 9 10 project (ProjectName)macro (MacroName Param) set (Var ${Param} ) message (STATUS ${Var} ) endmacro ()MacroName("1" ) MacroName("2" ) message (STATUS "${Var}" )
输出结果为。
1 2 3 4 ╰─ cmake .. -- 1 -- 2 -- 2