我正在使用一个子项目,其中大部分时间将与另一个CMake项目一起使用。我想知道CMake是否有像
这样的东西ifndef cmake_minimum_required
cmake_minimum_required(VERSION 2.8.11)
endif
基本上,如果已经在某处定义了cmake_minimum_required
,在我的子项目中我想使用已定义的内容,否则,我想在子项目中定义cmake_minimum_required
。
答案 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版”