CMake-导出目标,以便可以将其导入到另一个项目中并支持重新定位
下面的命令将生成my-targets-build-tree.cmake 但是,它将为所有目标的导入位置释放字段提供绝对路径CMake-导出目标,以便可以将其导入到另一个项目中并支持重新定位,cmake,Cmake,下面的命令将生成my-targets-build-tree.cmake 但是,它将为所有目标的导入位置释放字段提供绝对路径 export( EXPORT my-targets FILE "${CMAKE_CURRENT_BINARY_DIR}/share/cmake/${PROJECT_NAME}/my-targets-build-tree.cmake" ) 这意味着我可以使用该文件将目标导入到另一个项目中,但前提是库未在磁盘上移动。意思事情是不可迁移的。。。i、
export(
EXPORT my-targets
FILE "${CMAKE_CURRENT_BINARY_DIR}/share/cmake/${PROJECT_NAME}/my-targets-build-tree.cmake"
)
这意味着我可以使用该文件将目标导入到另一个项目中,但前提是库未在磁盘上移动。意思事情是不可迁移的。。。i、 例如,你不能在另一台机器上随意移动包裹
有没有办法使生成的cmake文件支持包重新定位?例如,让他们考虑环境变量(),使用命令告诉CFALE如何在安装它们时将磁盘放在磁盘上,并使用它们来创建配置文件,而不是<代码>出口()/< >:
set(MYLB\u INCLUDE\u INSTALL\u DESTINATION INCLUDE/my\u lib)
添加库(我的库…)
#需要在此处分别提供安装目录和构建目录中的位置
目标目录包括目录(my_lib PUBLIC
$
$)
安装(目标我的库导出我的库)
归档目标库#静态和导入库安装到库
库目标库#。因此安装到库
运行时目标bin#。已安装到bin的DLL
)
#安装包含要包含/my_lib的公共头的目录
安装(目录包括目标${MYLB\u包括\u安装\u目标}
文件\u权限所有者\u读取组\u读取世界\u读取
目录\权限所有者\读取所有者\执行组\读取组\执行世界\读取世界\执行)
#创建cmake config到lib/cmake/my_libConfig.cmake
安装(导出我的库)
目的地库/cmake
文件my_libConfig.cmake)
这允许您
export(export)
导出项目的生成树。由于不希望移动/复制生成树,因此在这种情况下不要期望可重新定位的导出。您可能希望导出安装树,这可以通过可重新定位的方式完成。使用install(EXPORT)
命令导出安装树。
set(MYLB_INCLUDE_INSTALL_DESTINATION include/my_lib)
add_library(my_lib ...)
# need to provide location in installation dir and build dir separately here
target_include_directories(my_lib PUBLIC
$<BUILD_INTERFACE:include>
$<INSTALL_INTERFACE:${MYLB_INCLUDE_INSTALL_DESTINATION}>)
install(TARGETS my_lib EXPORT my_lib
ARCHIVE DESTINATION lib # static and import libs installed to lib
LIBRARY DESTINATION lib # .so installed to lib
RUNTIME DESTINATION bin # .dlls installed to bin
)
# install directory containing public headers to include/my_lib
install(DIRECTORY include DESTINATION ${MYLB_INCLUDE_INSTALL_DESTINATION}
FILE_PERMISSIONS OWNER_READ GROUP_READ WORLD_READ
DIRECTORY_PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
# create cmake config to lib/cmake/my_libConfig.cmake
install(EXPORT my_lib
DESTINATION lib/cmake
FILE my_libConfig.cmake)