【问题标题】:CMake variable contents dependent on build/installCMake 变量内容取决于构建/安装
【发布时间】:2018-11-01 16:23:22
【问题描述】:

使用$<INSTALL_INTERFACE:...>$<BUILD_INTERFACE:...> 生成器表达式,我可以将目标属性设置为不同的值,具体取决于目标是在当前构建目录中导出还是全局安装。我正在编写一个自定义宏来配合我的 CMake 包和目标,并希望根据宏的导出位置(在构建目录中)或安装位置而使宏的行为有所不同。宏包含在<package>-macros.cmake.in 中,该<package>-macros.cmake.in 包含在我的<package>-config.cmake 文件中,并使用configure_file 配置到构建目录中,然后安装。我尝试在使用configure_file 命令设置的变量中使用生成器表达式,但显然它们不打算以这种方式工作。我假设我的要求并不少见,通常如何使用 CMake 完成?

【问题讨论】:

    标签: cmake cmake-modules


    【解决方案1】:

    只需为export()install(EXPORT) 创建不同 <package>-config.cmake 文件。在这些文件中,您可能有一个变量来区分它们。

    您甚至可以使用具有不同 CMake 环境(变量)的 configure_file 命令从相同的模式创建两个文件:

    -config.cmake.in

    set(IS_BUILD_INTERFACE @IS_BUILD_INTERFACE@)
    # other commands, inclusion of other files, etc.
    

    -macros.cmake

    if(IS_BUILD_INTERFACE)
        # Part of build interface
    else()
        # Part of install interface
    endif()
    

    CMakeLists.txt

    # Prepare the file for build interface exporting
    set(IS_BUILD_INTERFACE ON)
    configure_file(<package>-config.cmake.in <package>-config.cmake @ONLY)
    export(PACKAGE <package>)
    
    # Prepare the file for install interface exporting
    set(IS_BUILD_INTERFACE OFF)
    configure_file(<package>-config.cmake.in <package>-config.cmake.install @ONLY)
    install(FILES <package>-config.cmake.install DESTINATION cmake)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多