CMake是否具有ifdef endif的概念

时间:2015-05-13 19:57:23

标签: cmake

我正在使用一个子项目,其中大部分时间将与另一个CMake项目一起使用。我想知道CMake是否有像

这样的东西
ifndef cmake_minimum_required
cmake_minimum_required(VERSION 2.8.11)
endif

基本上,如果已经在某处定义了cmake_minimum_required,在我的子项目中我想使用已定义的内容,否则,我想在子项目中定义cmake_minimum_required

1 个答案:

答案 0 :(得分:2)

您可以使用CMake政策CMP0000来判断是否已调用cmake_minimum_required

调用cmake_minimum_required后,CMP0000会自动设置为NEW,您可以这样做:

cmake_policy(GET CMP0000 MinimumVersionIsSet)
if(NOT MinimumVersionIsSet STREQUAL "NEW")
  cmake_minimum_required(VERSION 2.8.11)
endif()

我能看到失败的唯一方法是更高级别的CMakeLists.txt包含如下内容:

cmake_minimum_required(VERSION 2.6)
cmake_policy(SET CMP0000 OLD)

在为您的项目调用add_subdirectory之前。这样可以有效地将策略设置为NEW,然后立即将其设置为OLD。但是,我觉得这种情况极不可能,因为政策只会设置为OLD,以便省略cmake_minimum_required来电。

说完这一切之后,我认为你的做法可能有些风险。假设顶级项目将所需的最低版本设置为2.6,并且您需要仅在2.8中提供的功能。由于跳过了cmake_minimum_required调用,运行CMake 2.6的用户将收到更多神秘的失败消息(关于未知的CMake命令),而不是更简洁的“需要CMake 2.8.11或更高版本。您运行的是2.6.0版”