首页 > 解决方案 > CMake 变量内容取决于构建/安装

问题描述

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

标签: cmakecmake-modules

解决方案


只需为 为. 在该文件中,您可能有一个变量来区分它们。<package>-config.cmakeexport()install(EXPORT)

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

<package>-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)

推荐阅读