获取由 add_subdirectory 添加的 CMake 项目版本

Kam*_*pov 4 cmake

我有一个依赖于 Google 测试库的 CMake 项目。我已经添加了谷歌测试使用ExternalProject_Addadd_subdirectory描述here(https://github.com/google/googletest/tree/master/googletest部分Incorporating Into An Existing CMake Project)。

现在,命令后,add_subdirectory我要检查包括项目的版本gtestgmock,但是gtest_VERSIONgmock_VERSION变量是不明确的。是否可以通过添加项目版本add_subdirectory

Flo*_*ian 5

由于您无法直接访问子目录局部变量,因此我想添加我的变体,使gtest_VERSION变量CACHED可以全局访问:

  1. CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE

    project()命令包含的 CMake 语言文件或模块。这旨在将自定义代码注入到项目构建中,而无需修改其源代码。

    file(
        WRITE "${CMAKE_BINARY_DIR}/SetProjectVersion.cmake"
        [=[
            set(${PROJECT_NAME}_VERSION "${${PROJECT_NAME}_VERSION}" CACHE INTERNAL "")
        ]=]
    )
    set(
        CMAKE_PROJECT_gtest_INCLUDE
        "${CMAKE_BINARY_DIR}/SetProjectVersion.cmake"
    )
    
    Run Code Online (Sandbox Code Playgroud)
  2. 覆盖project()命令

    cmake_policy(SET CMP0048 NEW)    
    
    macro(project)
        _project(${ARGN})
        set(${PROJECT_NAME}_VERSION "${${PROJECT_NAME}_VERSION}" CACHE INTERNAL "")
    endmacro()
    
    Run Code Online (Sandbox Code Playgroud)