CMake 变量内容依赖于 build/install

CMake variable contents dependent on build/install

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

只需为 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)