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