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

时间:2014-05-08 05:08:27

标签: configuration cmake

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

  • 有未使用的变量(在大多数情况下可能是拼写错误)
  • 有未使用的模块(与以前相同或无用的东西)
  • 特定if未被评估为TRUE

我发现cmake是基于宏的解决方案的事实使得很难发现大项目的错误,所以如果有人对此有一些提示。基本上cmake并不会提醒您,因为任何内容都可能是自定义变量,不一定是拼写错误或错误。

1 个答案:

答案 0 :(得分:2)

让我们无序地解决你的观点。

  

特定的if未被评估为TRUE

实现此目标的方法是FATAL_ERROR message

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

有未使用的变量

这更难。有--warn-unused-vars--warn-uninitialized命令行选项,但这必须由用户在运行CMake时提供。无法在CMake脚本中强制执行此行为。

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

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

  

有未使用的模块

这是不可能的,但我也没有看到一个大问题。最糟糕的事情是,拉入模块会给缓存的变量增加一些噪音,但这些都不会对最终生成的构建文件产生任何影响。

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