使用$<INSTALL_INTERFACE:...>
和$<BUILD_INTERFACE:...>
生成器表达式,我可以将目标属性设置为不同的值,具体取决于目标是在当前构建目录中导出还是全局安装。我正在编写一个自定义宏,以伴随我的CMake包和目标,并希望根据导出(在构建目录中)或安装的位置来使宏表现不同。宏包含在<package>-macros.cmake.in
中,该宏包含在我的<package>-config.cmake
文件中,并使用configure_file
配置到构建目录中,并在以后安装。我尝试在使用configure_file
命令设置的变量中使用生成器表达式,但是显然它们并不打算那样工作。我认为我的要求并不罕见,通常使用CMake如何完成?
答案 0 :(得分:1)
只需为<package>-config.cmake
和export()
创建不同 install(EXPORT)
个文件。在这些文件中,您可能会有一个变量来区分它们。
您甚至可以使用configure_file
命令在不同的CMake环境(变量)下从同一模式创建两个文件:
set(IS_BUILD_INTERFACE @IS_BUILD_INTERFACE@)
# other commands, inclusion of other files, etc.
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)