cmake 是否可以选择避免使用未定义的变量(如 bash set-u)

Mat*_*ieu 6 cmake

确实有cmake一种在使用未定义变量时生成错误的机制,有点set -ubash.

我有一个由多个文件组成的大项目CMakeLists.txt,代表约 1500 行,因此使用这种结构相当困难:if(NOT DEFINED VAR_NAME)

在理想的世界中,以下内容CMakeLists.txt可能会失败。

cmake_minimum_required(VERSION 3.13)
message(STATUS "Will delete ${DIR}/${FILE}")
Run Code Online (Sandbox Code Playgroud)
  • 这样的选择存在吗?(我不这么认为,但是cmake文档很大,我可能错过了)
  • 这种行为是否在项目路线图上?

sta*_*all 6

正如 KamilCuk 提到的--warn-uninitialized在调用 CMake 来配置项目时可以传递一个标志。如果您希望它成为错误,请添加-Werror=dev.


Mat*_*ieu 0

在 3.5.x 版本中,新的-Werror=dev结合 --warn-uninitialized具有我想要的行为。

所以最终的解决方案只是创建一个别名:

alias cmake="cmake -Werror=dev --warn-uninitialized"
Run Code Online (Sandbox Code Playgroud)