使用CMake检测当前CMake版本

34

我正在开发一个使用CMake的项目。顶层CMakeLists.txt文件包含以下行:

cmake_minimum_required(VERSION 3.7.2) # Kittens will die if you switch to an earlier version of CMake. We suggest using CMake 3.8.0.

我希望强制所有开发人员切换到CMake 3.8.0版本,但由于某些原因,并非所有开发人员都拥有管理权限,无法立即从3.7.2切换到3.8.0。实际上,我们并不需要版本3.8.0的任何新功能,但我们的政策是始终使用最新和最好的工具,以防止未来出现"升级"问题 - 例如在过去迅速从Qt4切换到Qt5是一个好决定 - 我知道始终切换到最新的库和工具也有一些缺点,正如这里所讨论的那样,但我们希望这样做。
因此,与其强制每个人使用版本3.8.0,我想在使用CMake 3.7.2时输出警告消息。类似于以下内容:
# not working - just pseudocode
if(CMAKE_VERSION == "3.7.2") 
    message("Please consider to switch to CMake 3.8.0")
endif()

我试图读取VERSION变量,但这并不起作用。有人知道如何实现这种检查吗?


我认为所有的开发者都可以构建软件,因此他们也可以构建cmake。这比用无关的东西使项目变得臃肿要好。 - user933161
CMake不需要安装。是否有可能使用适合您项目需求的版本部署?这就是我在我的项目中所做的,也是例如Visual Studio 2017或Android NDK所做的。 - Florian
1个回答

61

这方面有一些变量,在这里进行了描述:

CMAKE_MAJOR_VERSION
CMake的主版本号,例如CMake 2.4.3中的“2”
CMAKE_MINOR_VERSION
CMake的次版本号,例如CMake 2.4.3中的“4”
CMAKE_PATCH_VERSION
CMake的修订版本号,例如CMake 2.4.3中的“3”

此外,变量CMAKE_VERSION包含版本的字符串。 在您的情况下,您可以使用以下命令:

if(${CMAKE_VERSION} VERSION_LESS "3.8.0") 
    message("Please consider to switch to CMake 3.8.0")
endif()

其他比较运算符是VERSION_EQUALVERSION_GREATER


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接