CMake 是否支持原生字符串,如何简化字符串中转义字符的处理流程?
CMake install阶段执行代码的最优实现方案
针对install(CODE)写法需要频繁转义$和引号的问题,有两种成熟的无转义实现方案:
方案1:使用括号参数(推荐,兼容CMake 3.0+)
CMake 3.0及以上版本提供括号参数语法,用[=[和]=]包裹的内容不会被CMake提前解析变量,也不需要转义内部的引号和特殊符号,完全符合安装阶段延迟展开变量的需求。
改造后的写法如下:
install(CODE [=[ message(STATUS "The value of ${VAR} is \"${VAL}\"") ]=])
如果你的代码内部本身包含[=[或]=]字符串,还可以自定义首尾的等号数量避免冲突,比如用[==[和]==]、[===[和]===]即可,适配任意复杂度的代码逻辑。
方案2:独立脚本调用(兼容所有CMake版本)
如果需要兼容3.0以下的老版本CMake,或者安装阶段的逻辑代码量较大,可以将需要执行的代码单独存为独立的CMake脚本文件,再通过install(SCRIPT)命令调用,全程不需要做任何转义处理:
- 新建
install_custom.cmake脚本,写入需要执行的逻辑:
message(STATUS "The value of ${VAR} is \"${VAL}\"") # 可以写任意多的复杂逻辑
- 在主
CMakeLists.txt中调用该脚本:
install(SCRIPT ${CMAKE_CURRENT_LIST_DIR}/install_custom.cmake)
内容的提问来源于stack exchange,提问作者Kevin Ushey
相关产品推荐
相关产品推荐

