cmake 文件应该安装在哪里?

2023-12-30

cmake 文件应该安装在哪里?我目前有安装目标

cmake_minimum_required(VERSION 2.8.10)
project(projectname)
include(CMakePackageConfigHelpers)
include(GNUInstallDirs)

add_library(projectnameINTERFACE)
target_include_directories(projectnameINTERFACE
        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/projectname>
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/>
)


configure_package_config_file(projectnameConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/projectnameConfig.cmake INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX})
install(TARGETS projectnameEXPORT projectname-targets)

install(EXPORT projectname-targets FILE projectnameTargets.cmake DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/projectnameConfig.cmake DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake)
install(DIRECTORY ./ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/projectname FILES_MATCHING PATTERN "*.h" PATTERN ".git" EXCLUDE)

是路径${CMAKE_INSTALL_PREFIX}/share/projectname/cmake正确的?

对于 Windows 版本,应该安装CMAKE_INSTALL_PREFIX=C:/libs/project。在 Linux 中安装时使用CMAKE_INSTALL_PREFIX=/usr or /usr/local,我不确定 cmake 文件是否应该安装在/usr/share/cmake或类似的文件夹。

最后,它应该适用于这两种方法(/usr and path/to/libdir)以合理的方式。


根据官方 cmake 文档,有几种可能的方式来安装这些 cmake 文件。为了使用以下方式找到图书馆,位置很重要find_package()命令。根据平台的不同,可能的位置有:

<prefix>/                                                       (Windows)
<prefix>/(cmake|CMake)/                                         (Windows)
<prefix>/<name>*/                                               (Windows)
<prefix>/<name>*/(cmake|CMake)/                                 (Windows)
<prefix>/(lib/<arch>|lib*|share)/cmake/<name>*/                 (Unix)
<prefix>/(lib/<arch>|lib*|share)/<name>*/                       (Unix)
<prefix>/(lib/<arch>|lib*|share)/<name>*/(cmake|CMake)/         (Unix)
<prefix>/<name>*/(lib/<arch>|lib*|share)/cmake/<name>*/         (Windows/Unix)
<prefix>/<name>*/(lib/<arch>|lib*|share)/<name>*/               (Windows/Unix)
<prefix>/<name>*/(lib/<arch>|lib*|share)/<name>*/(cmake|CMake)/ (Windows/Unix)
<prefix>/<name>.framework/Resources/                            (macOS)
<prefix>/<name>.framework/Resources/CMake/                      (macOS)
<prefix>/<name>.framework/Versions/*/Resources/                 (macOS)
<prefix>/<name>.framework/Versions/*/Resources/CMake/           (macOS)
<prefix>/<name>.app/Contents/Resources/                         (macOS)
<prefix>/<name>.app/Contents/Resources/CMake/                   (macOS)

前缀由以下定义CMAKE_INSTALL_PREFIX变量默认为C:/Program Files/${PROJECT_NAME}在 Windows 和/usr/local在 Unix 上。

在我的 Arch Linux 系统上,大多数库都使用<prefix>/lib*/cmake/<name>*/(Unix 风格)位置。对于 Windows 个人来说,我更喜欢<prefix>/cmake地点。

有关更多详细信息,我建议您阅读 CMake 版本的官方文档(对于 v3.14,请参阅下面参考文献中的链接)。

参考:

  1. https://cmake.org/cmake/help/v3.14/variable/CMAKE_INSTALL_PREFIX.html https://cmake.org/cmake/help/v3.14/variable/CMAKE_INSTALL_PREFIX.html
  2. https://cmake.org/cmake/help/v3.14/command/find_package.html?highlight=find_package#id5 https://cmake.org/cmake/help/v3.14/command/find_package.html?highlight=find_package#id5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cmake 文件应该安装在哪里? 的相关文章

  • Haskell 项目可以使用 cmake 吗?

    我正在计划一个用 Haskell 编写的项目 也许也有一些部分是用 C 编写的 对于构建系统 我决定不选择 Haskell 程序 cabal 的常见选择 主要是因为我想了解其他语言的构建程序是如何工作的 我听说过 CMake 我认为这是一个
  • 如何使用 --build 选项查看 cmake 发出的命令

    当我运行 cmake build target INSTALL 命令时 如何查看发出的命令 似乎没有像 versbose之类的选项 cmake 帮助说 cmake build 是底层构建工具的接口 但没有说明有关发出的命令转储的任何内容 我
  • 在 MAC OSX 上使用 CMake 生成 .bundle 文件

    我想生成一个可执行文件 bundle文件于Mac OSX 10 6 8 using CMake 我的 CMakeLists txt 文件如下所示 cmake minimum required VERSION 2 8 PROJECT TEST
  • 针对 dll/lib 的 cmake 链接

    我的 cmake 的输出是一个静态库 我正在这样创建它 add library myMainLib STATIC BACKEND SOURCES 当我尝试让 myMainLib 链接到第三方 lib dll 时 出现了问题 dll 文件将在
  • 在cmake中设置PKG_CONFIG_PATH

    我已经在本地构建了 opencv 并将其安装到本地目录 不是系统默认目录 opencv pc存在于该本地文件夹中的 pkgconfig 文件夹下 我怎样才能找到这个opencv pc来自 cmake 因为我想从我的程序链接并包含 openc
  • 在 C 中使用 pow 时,CMake 可以检测是否需要链接到 libm 吗?

    对于某些编译器 using powC 程序中的某些其他函数需要链接到m library https stackoverflow com q 8671366 1959975 但是 某些编译器不需要这样做 并且在链接到m图书馆 C 也存在几乎相
  • 在cmake中集成bash测试脚本

    我有一个 C cmake 项目 它使用 Boost Test 进行单元测试 现在我想向 cmake 公开一系列 bash 脚本 用于集成测试 假设每个脚本在以下情况下返回 0PASS或某些情况下 0FAILURE 我希望每次运行时都执行每个
  • 使用 CMake 对 SDL 的未定义引用

    我正在使用 SDL v1 2 15 7 和 CMake 3 2 1 开发一个项目 在 h 文件中我添加了 include
  • CMake“无法运行 MSBUILD.exe”命令错误

    当我想为 opencv 3 3 0 创建 Visual Studio 15 2017 make 文件时 它给了我以下错误消息 error in configuration process project files maybe invali
  • 将 Doctest 与代码一起使用时将实现放在哪里

    我在用着doctest https github com onqtam doctest用于我的 C 项目中的测试 我想将测试代码与我的实现放在一起 正如库所说是可能的 但我似乎不知道如何处理 doctest 实现代码 我有一个doctest
  • 检查 cmake 中顺序不正确的可选目标

    我目前正在开发一个使用 cmake 作为构建系统的大型软件项目 但我有一个问题要检查另一个目标是否存在 或将存在 例如 有根 CMakeLists txt 和两个模块 可以选择将其作为子文件夹添加到软件项目中 A CMakeLists tx
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • CMake 找不到请求的 Boost 库

    既然我已经浏览了其他人的解决方案几个小时 但找不到适合我的问题的正确答案 我想将我的具体问题带给您 我正在尝试使用 CMake 构建 vsomeip 为此 我之前构建了 boost 1 55 但是 我在 CMake 中收到以下错误 The
  • 使用 CMake 和 clang 在 Windows 上构建简单的 C++ 项目

    我正在尝试在 Windows 10 上构建一个简单的 Hello World 程序 最好使用 CMake 和 clang 如果我使用 MinGW 的 g 编译器 我可以成功编译 链接和运行同一个项目 但当我尝试使用 clang 时会遇到问题
  • 如何在Linux上构建GLFW3项目?

    我已经使用 cmake 和 make 编译了 glfw3 和包含的示例 没有出现任何问题 开始编写我的第一个项目 作为 opengl 和 glfw 的新手 并且对 C 和 CMake 没有经验 我正在努力理解示例构建文件 甚至要链接哪些库和
  • CMake - 未定义参考

    我正在尝试将 gtest 包含到我的项目中 问题是我在 GTest 中收到未定义的引用错误 我正在尝试在 Gtest 中测试 Node 类 在节点的构造函数中 我使用类记录器 尽管我已将库记录器添加到 gtest target 中 但我仍然
  • VS 2010 和 CMake:“rc”未被识别为内部或外部命令

    我正在尝试使用 VS 2010 和 CMake 在 Windows 10 Home 上构建一个项目 我收到以下错误 zutil c lib nologo out zlib lib adler32 obj compress obj crc32
  • Opencv - 找不到头文件

    我正在尝试使用 opencv 开始开发 问题是 到目前为止我几乎无法设置 opencv 因为我找不到它的头文件 我对此主题进行了一些研究 但没有一个真正有帮助 下面是一些链接 opencv2 包含文件在哪里 https stackoverf
  • 是否可以让 cmake 构建文件(CMakeLists.txt)不在 CLion 的根目录中

    是否可以让 cmake 构建文件 CMakeLists txt 不在 CLion 的根目录中 我目前正在开发的项目中 cmake 构建文件不在 CLion 项目的根目录中 在 out Debug 目录中 我希望 CLion 打开该项目的根目
  • 如何将 OpenCV 的测试框架与 CMake 结合使用?

    好像 OpenCV 有一个测试框架 https github com Itseez opencv tree ef91d7e8830c36785f0b6fdbf2045da48413dd76 modules ts include opencv

随机推荐