CMake变量内容取决于构建/安装

时间:2018-11-01 16:23:22

标签: cmake cmake-modules

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

1 个答案:

答案 0 :(得分:1)

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

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

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