c – 可重定位多平台安装的理想cmake安装目录结构是什么?
CMake安装采用目标目录,通常使用GNUInstallDirs加载目标名称的标准值.例如:
include(GNUInstallDirs) install(TARGETS Foo EXPORT Foo INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) 但是,它不提供为不同平台或体系结构构建的不同路径.我一直在通过CMAKE_INSTALL_PREFIX安装到我项目中的平台特定文件夹,如下所示: CMAKE_INSTALL_PREFIX=dist/${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR} 这有一些问题: >它复制了跨平台相同的包含. 我正在寻找一个与find_package模块模式和配置模式一起工作的结构;这样的事情: <install_prefix>/ include/ foo/ foo.h lib/ <PLAT x ARCH x CONFIG>/ cmake/ foo/ FooConfig.cmake libFoo.a 目标是: > libs可以为不同的平台,架构和配置共同安装 考虑到我将在这里安装大多数第三方库,如果可以通过覆盖GNUInstallDirs的变量来完成,它可能适用于许多库.其余我想要编辑或我只是放弃并使用包括平台和拱门的单独安装目录. 解决方法
如果您希望用户将某个标准目录设置为CMAKE_PREFIX_PATH,就像
/usr/local # installation prefix 但是你的项目将东西安装到非标准的,特定于平台的子目录中,比如 /usr/local/linux/x86/ # actual root directory where things are installed 您可以将FooConfig.cmake放入标准子目录: /usr/local/lib/FooConfig.cmake 但要写它,以便从特定于平台的目录中搜索适当的.cmake: # File: FooConfig.cmake # Location: lib/ # # This is platform-independent script. # # Redirect configuration to the platform-specific script <system>/<cpu>/lib/FooConfig.cmake. include(${CMAKE_CURRENT_LIST_DIR}/../${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR}/lib/FooConfig.cmake) 特定于平台的* Config.cmake脚本可以通常的方式编写. 所以,如果用户会写 find_package(Foo) 在为Linux / x86设置的环境中,它将为该平台设置导入的目标. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |