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)
使用 $<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)