自己创建XXConfig.cmake文件

2023-05-16

创建自定义的XXConfig.cmake文件:

我们在使用cmake进行代码构建的时候,当需要通过find_package(XXX)来配置相关库的路径(头文件路径、链接库路径)的时候,如果没有在系统环境变量中设置相关的XXX_DIR等,cmake会提示出错。所以所有网上介绍某个库的安装教程中,在最后都会让你设置相关的系统环境变量。这样做一般没什么问题。但是当你由于项目等原因,需要某个库的多个版本。比如需要在机器上安装opencv2.4.9 opencv3.1.0等某个库的多个版本时候,由于系统环境变量对于某个特定的库只能设置一个相关的环境变量,因而,在使用不同版本的opencv时候,需要临时去系统环境变量中修改相关环境的值。这样就比较麻烦了。
有了xxConfig.cmake就方便多了,只需要把xxCongig.cmake放在库目录的顶层文件夹中。

使用xxConfig.cmake的优点

这时候就不需要在系统环境变量中设置include和lib的路径了。当然,系统的path变量中还是要加入dll的路径值,这是程序运行的保证。

示例

比如我自己编写了一个yyl的库,放在YYL文件夹下。YYL文件夹下有三个子文件夹:include、lib、bin。每个文件夹下面放了相应的文件,现在有如下的文件夹结构:

  • YYL
    • include
      • yyl.h
    • lib
      • yyl.lib
    • bin
      • yyl.dll

想要实现在cmake中使用find_package(YYL)来设置相关的环境变量,需要在YYL文件夹下创建一个名称为YYLConfig.cmake的文本文件。这里的YYL需要换成你自己对应的库文件名。
一个简单的YYLConfig.cmake文件内容如下(这是个精简的xxConfig.cmake文件,但是已经足够平时的个人使用。如果读者有兴趣,可以参考opencv build目录下的opencvConfig.cmake以及相关文档深入研究):

find_path(YYL_INCLUDE_DIR NAMES yyl.h PATHS “Your_own_path/YYL/include”)
find_library(YYL_LIBRARY NAMES yyl.lib PATHS “Your_own_path/YYL/lib” )
set(YYL_FOUND TRUE)
set(YYL_INCLUDE_DIRS ${YYL_INCLUDE_DIR})
set(YYL_LIBS ${YYL_LIBRARY })
mark_as_advanced(YYL_INCLUDE_DIRS YYL_LIBS )

使用方法:(工具 cmake-gui)

假设这里的YYL为opencv(以opencv为例)
在cmakelist.txt中加入find_package(YYL)
在cmake-gui下点击configure按钮,会提示错误
这里写图片描述

需要把Opencv_DIR的路径切换到你的opencv路径下包含OpenCVConfig.cmake的文件夹下
这里写图片描述
再次点击configure,错误消失。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自己创建XXConfig.cmake文件 的相关文章

  • 如何使用c++在运行时动态注册工厂类中的类

    现在 我实现了一个工厂类来动态创建带有标识字符串的类 请参见以下代码 void IOFactory registerIO Register NDAM9020 gt IOBase return new NDAM9020 Register BK
  • Visual Studio 将新文件放入错误的目录

    我使用 cmake 和 Visual Studio 并具有以下目录结构 workspace CMakeLists txt project1 src project2 src build 这背后的想法是源外构建 以便 cmake 生成的构建文
  • cmake 发现错误的 python 库

    我是 CMake 新手 无法理解一些使用概念 我正在从 C 程序调用 python 脚本 include
  • 如何使用Cmake使用框架?

    对于 Macos 我想链接到一些框架 在 Windows 中 我想链接到一些库 比如OpenGL Framework 如何使用cmake表达这个需求 您可以尝试以下代码 target link libraries
  • Qt 5 和 OS X Mavericks 问题

    我正在使用 Cmake 在 OS X 10 9 上构建 QT 项目 自 Mavericks 以来 OpenGL 标头的位置似乎发生了变化 文件夹 System Library Frameworks OpenGL framework Head
  • 使用 cmake 构建项目后如何运行 ctest

    我希望每次成功构建项目时都启动测试 如果某些测试被破坏 我希望我的构建也被破坏 默认情况下 我需要通过运行来手动运行测试ctest命令 CTest 实际上可以构建项目 但我使用调用的 IDEmake建立资源 和make不运行测试 我将此命令
  • CMake:如何在多个文件上运行自定义命令来生成源文件?

    我有以下情况 我想编译一些Scheme文件Gambit https github com gambit gambit成可执行文件 为此 我使用 gambit 将所有计划文件翻译 生成为 C 和目标文件 然后将其编译并链接为可执行文件 假设我
  • 查找带有 Anaconda cmake 前缀的 boost-python3

    DLDR如何将 cmake 指向 boost python3 库 cmake 不会自动检测到它 我正在尝试建立caffe https github com BVLC caffe对于 Python 3 6 使用提供的 cmake 我的系统规格
  • cmake:在 CMakeLists.txt 中选择生成器

    我想强制CMake使用 Unix Makefiles 发电机来自 CMakeLists txt 中 这是我现在使用的命令 cmake G Unix Makefiles 我希望是这样的 cmake 当在安装了 VC 和自定义工具链的 Wind
  • 使用 cmake 和 Visual Studio 的一个解决方案中的多个项目

    我有一个 Visual Studio 2010 解决方案 其中包含 5 个项目 两个库和三个应用程序 依赖于库 我现在想将构建系统迁移到 CMake 也能够在 Linux 下编译 我已经了解了如何为一个项目编写 CMakeLists txt
  • 使用 OpenCL 支持构建 OpenCV

    在 CMake 中 我使用 OpenCL Enable ON 构建了 OpenCV 它自动检测到OPENCL INCLUDE DIR路径但是OPENCL LIBRARY即使单击配置后也是空的 为了OPENCL LIBRARY我也没有看到浏览
  • Jenkins + Cmake + JIRA = 多个相互依赖项目的 CI?

    我们的系统中有许多小项目在 Linux 上运行 Slackware 7 11 正在慢慢迁移到 RHEL 6 0 大约 50 100 个应用程序和 15 20 个库 我们几乎所有的应用程序都使用我们的一个或多个库 我们的源树看起来像这样 ap
  • grpc找不到protobuf库

    我检查了 grpc 安装并完成了构建和安装 现在当我尝试 find package gRPC CONFIG REQUIRED I get CMake Error at CMakeLists txt 15 find package Found
  • fbtorch:cmake 找不到 torch 目录

    我正在尝试构建并安装 fbtorch 但是当我使用 cmake 时出现以下错误 CMake Error at CMakeLists txt 9 FIND PACKAGE By not providing FindTorch cmake in
  • 来自库的 CMake link_directories

    我正在尝试使用 CMake 和 Xcode 从另一个库链接到一个库 这对任何图书馆来说都是一个问题 但为了让事情更容易传达 让我们使用zlib举个例子 这似乎适用于可执行文件 如下所示 LINK DIRECTORIES LIB DIR zl
  • 如何将脚本的依赖项添加到 CMake 中的目标?

    链接我的程序后 我需要对其执行一些后处理 我添加了一个add custom command TARGET 效果很好 但是 这个额外的自定义命令运行一个脚本 未生成 它已签入代码库 并且我希望如果该脚本发生更改 目标将被视为过时 以便正确重建
  • 使用 target_link_libraries 以绝对路径作为库路径进行平台库名称扩展?

    在 CMake 中使用 target link libraries 仅使用库名称 例如 target link library myProject SomeLibrary 将根据平台将 SomeLibrary 扩展为 SomeLibrary
  • libSDL、CMake 和 Mac OS X Lion

    我正在尝试在我的Mac上编译cmake项目 但它取决于SDL框架 我安装了这个框架 在 cmake 之后向我报告找不到 libSDL 我自己设置了以下导出变量 按照 cmake 的建议 export SDL INCLUDE DIR Libr
  • CMake 中的 FindSDL2 发生了什么?

    我在游戏中使用 SDL2 我一直使用自定义 FindSDL2 cmake 因为标准 CMake 集中没有 然而 前段时间确实出现了有关 FindSDL2 的帖子 例子 红迪网帖子 https www reddit com r opengl
  • 在 VS2017 下使用 Conan 和 CMake 项目进行依赖管理

    我正在尝试使用 CMake 与 VS2017 集成为 C 设置一个开发环境 以便在 Linux x64 下进行编译 为了更好地管理依赖关系 我选择使用 Conan 但我对这个软件还很陌生 我想知道让 VS2017 识别项目依赖关系的最佳方法

随机推荐