CMake是否存在类似bash set -u的未定义变量使用报错选项?
现有检测选项说明
CMake 确实提供了类似bash set -u的未定义变量检测能力,不需要逐行添加if(NOT DEFINED)判断:
- 开启未定义变量警告:CMake 3.10及以上版本支持
--warn-uninitialized命令行参数,执行cmake配置时添加该参数,所有使用${VAR}展开未定义变量的场景都会输出警告。你也可以在项目根CMakeLists.txt的开头添加set(CMAKE_WARN_UNINITIALIZED ON)实现同样效果。 - 直接升级为错误终止:CMake 3.20及以上版本支持
--warn-error=uninitialized命令行参数,搭配上面的警告开关使用时,只要检测到未定义变量展开就会直接抛出错误终止配置流程,完全符合你要的强校验需求。
你给出的示例代码,使用如下命令配置就会直接触发报错:
cmake --warn-uninitialized --warn-error=uninitialized ..
特性迭代情况
这类未定义变量校验已经是CMake的正式稳定特性,不属于待开发的路线图内容。官方在后续版本中持续优化检测的覆盖范围:3.25版本之后已经支持函数内部变量、嵌套展开变量、生成器表达式中的未定义变量检测,误报率已经非常低,适合大型项目使用。
注意:合法的变量存在性判断场景(如
if(DEFINED VAR)、直接写if(VAR)判断变量真值)不会触发检测报错,不会影响现有合法代码的运行。
内容的提问来源于stack exchange,提问作者Mathieu
相关产品推荐
相关产品推荐

