Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Configuration 强制cmake在未满足的条件下使构建失败_Configuration_Cmake - Fatal编程技术网

Configuration 强制cmake在未满足的条件下使构建失败

Configuration 强制cmake在未满足的条件下使构建失败,configuration,cmake,Configuration,Cmake,如果出现以下情况,我想强制基于cmake的配置失败(并可能打印消息): 存在未使用的变量(在大多数情况下可能是输入错误) 有未使用的模块(与以前一样或无用的东西) 如果某个特定的未被评估为TRUE 我发现cmake是基于宏的解决方案这一事实使得在大型项目中很难发现错误,因此如果有人对此有一些提示的话。基本上,cmake不会提醒您,因为任何东西都可能是自定义变量,而不一定是输入错误或错误。让我们按顺序解决您的问题 特定if的计算结果不是真的 实现这一目标的方法是: 存在未使用的变量 这更难。有

如果出现以下情况,我想强制基于
cmake
的配置失败(并可能打印消息):

  • 存在未使用的变量(在大多数情况下可能是输入错误)
  • 有未使用的模块(与以前一样或无用的东西)
  • 如果某个特定的
    未被评估为
    TRUE

我发现
cmake
是基于宏的解决方案这一事实使得在大型项目中很难发现错误,因此如果有人对此有一些提示的话。基本上,
cmake
不会提醒您,因为任何东西都可能是自定义变量,而不一定是输入错误或错误。

让我们按顺序解决您的问题

特定if的计算结果不是真的

实现这一目标的方法是:

存在未使用的变量

这更难。有和命令行选项,但这必须由用户在运行CMake时给出。无法在CMake脚本中强制执行此行为

此外,没有办法将这些警告转化为致命错误:CMake仍将尝试生成有效的Makefile(并且可能会成功)。这里唯一可行的解决方案似乎是开发人员规程:每当开发人员对构建环境进行更改时,他们都应该知道这个编译选项,并相应地检查他们的代码。就像处理其他源代码一样

如果在强制执行时遇到问题,请尝试提供一个shell脚本作为包装器,该包装器已经设置了所有所需的命令行选项。虽然这并不完美,但至少可以消除在开发人员手册中查找该该死参数的障碍

有未使用的模块

这是不可能的,但我也不认为这里有什么大问题。可能发生的最糟糕的事情是,拉入模块会给缓存的变量添加一些干扰,但这些都不会对最终生成的构建文件产生任何影响

CMake模块应始终保持足够小,以便将其拉入不会对CMake配置运行的运行时产生明显影响

if(SOME_CONDITION)
    message(FATAL_ERROR "You did something wrong!")
endif()