gpt4 book ai didi

cmake - CMake有没有ifdef endif的概念

转载 作者:行者123 更新时间:2023-12-02 01:37:39 25 4
gpt4 key购买 nike

我正在处理一个子项目,大部分时间会与另一个 CMake 项目一起使用。我想知道 CMake 是否有类似

ifndef cmake_minimum_required
cmake_minimum_required(VERSION 2.8.11)
endif

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

最佳答案

您可以使用 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".

关于cmake - CMake有没有ifdef endif的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30224097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com