首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CMake的find_package仅包含头文件库

CMake是一个跨平台的开源构建工具,用于管理软件构建过程。它使用CMake语言来描述构建过程,并生成适用于不同平台和编译器的构建脚本。

在CMake中,find_package是一个用于查找和加载外部库的命令。它用于在项目中引入其他库的功能,以便在代码中使用这些库的函数和类。

find_package的作用是在系统中查找指定的库,并将其包含路径和链接库信息传递给CMake。它通常用于查找第三方库,如Boost、OpenCV等。

find_package的使用方法如下:

代码语言:txt
复制
find_package(package_name [version] [EXACT] [QUIET] [MODULE] [REQUIRED] [COMPONENTS components...])
  • package_name:要查找的库的名称。
  • version:要求的库的版本号。
  • EXACT:指定要求的版本号必须与系统中的版本完全匹配。
  • QUIET:在查找过程中不显示任何消息。
  • MODULE:指定要查找的库是一个CMake模块。
  • REQUIRED:指定要求找到指定的库,如果找不到则报错。
  • COMPONENTS:指定要查找的库的组件。

find_package的工作原理是通过在系统中搜索库的头文件和链接库文件来确定库的位置。一旦找到库,CMake会将其包含路径和链接库信息存储在变量中,供后续的编译和链接使用。

find_package的优势在于它可以自动处理不同平台和编译器的差异,使得项目的构建过程更加简化和统一。它还可以与其他CMake命令和功能结合使用,实现更复杂的构建逻辑和依赖管理。

find_package的应用场景包括但不限于以下几种情况:

  1. 引入第三方库:通过find_package可以方便地引入第三方库,如图像处理库、数学库等,以便在项目中使用其功能。
  2. 版本控制:通过指定版本号,可以确保项目使用的库版本符合要求,避免因版本不兼容而导致的问题。
  3. 模块化开发:通过将库的不同组件指定给COMPONENTS参数,可以按需引入库的不同功能,实现模块化的开发和构建。

对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的品牌商,无法给出具体的链接地址。但腾讯云作为一家知名的云计算服务提供商,提供了丰富的云计算产品和解决方案,涵盖了计算、存储、网络、人工智能等领域。您可以通过访问腾讯云官方网站,了解更多关于腾讯云的产品和服务信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

CMake打包以及支持find_package

本文对CMake打包,安装,导出以及支持find_package,使其能够很简单应用到其他项目中进行详细总结。...target_include_directories指定了这个要用到头文件,PUBLIC制定包含目录包括了include/子目录和当前CMake二进制目录(为了包含config_impl.hpp...my_library)来链接,并且需要设置include_directories来包含相关头文件,从而能够调用我们。...CMake安装我们需要安装东西包括:头文件,可执行工具以及已经编译好。这些都能够直接使用install()命令来直接安装。...为了使用导出功能,需要创建一个my_library.cmake文件,其中包含了所有编译和安装目标的引用,用户只需要包含这个文件就可以使用前面编译和安装

29000

cmake:使用find_package查找libjpeg静态

https://blog.csdn.net/10km/article/details/82931978 我们知道简单使用命令find_package可以查找指定package....对于经常会用到 jpegturbojpeg,可以用find_package(JPEG REQUIRED)来查找。...(STATUS "JPEG_LIBRARIES=${JPEG_LIBRARIES}") endif() 但我们知道cmake默认查找到是动态,所以如果想查找libjpeg静态,这样是不行。...其实FindJPEG.cmake脚本在设计时已经考虑到了这个问题,如下是FindJPEG.cmake脚本代码片段,可以看到调用者可以通过JPEG_NAMES这个变量指定优先查找到名字。...所以如果想要指定优先使用静态,前面的cmake脚本可以稍改一下,如下,就是在调用find_package之前设置JPEG_NAMES为想要静态名: # 查找libjpeg,优先使用静态 if(

1.7K20

cmake:cpp_redisfind_package脚本 FindCppRedis.cmake

cpp_redis是个C++11开源redis client,支持cmake构建,但并没有提供CONFIG模式import target导入脚本,如果希望在cmake下以find_package...方式导入cpp_redis,就需要自己写一个MODULE模式脚本,以下为FindCppRedis.cmake脚本实现 FindCppRedis.cmake # FindCppRedis # ----...执行时可接收以下输入变量 CPPREDIS_MT_DIR, [可选],指定MSVC以/MT选项编译安装位置 CPPREDIS_MD_DIR, [可选],指定MSVC以/M选项编译安装位置..., cpp_redis 头文件所在目录 CPPREDIS_LIBRARY, cpp_redis 文件位置 TACOPIE_LIBRARY, cpp_redis tacopie位置 MSVC...所在文件夹添加到CMAKE_MODULE_PATH # 否则find_package(CppRedis)时找不到FindCppRedis.cmake list (APPEND CMAKE_MODULE_PATH

60220

深入浅出CMake(三):find_package 添加依赖

如果用 g++ 编译的话,大概是这样 g++ hello.cpp -ltest -o hello -I include 引入库文件时,我们必须知道头文件路径还有文件路径 如果我们工程引入不止一个文件...package 在 cmake 编译体系中,package 用来指代一个依赖,包括一些头文件、动态、静态等等,在 CMakeFileLists.txt 中通过 find_package()命令可以很轻易实现...比如很多同学可能会用 OpenCV 进行图像开发,它是个非常有名开源,它有 10 来个文件、几十个头文件,因此如何正确引用它就是一件值得小心翼翼事情,但好在 cmake 可以轻松搞定这件事情。...下面需要说明是,find_package(OpenCV REQUIRED)执行成功后,它头文件路径,文件路径都会被赋值。...XXX_FOUND 代表是否查找成功 XXX_INCLUDE_DIRS 代表头文件路径 XXX_LIBRARIES 代表文件路径 比如,cmake 可以很轻松引入 bzip2 find_package

11.2K41

cmake 添加头文件目录,链接动态、静态

cmake 添加头文件目录,链接动态、静态 cmake 添加头文件目录,链接动态、静态 1. 添加头文件目录INCLUDE_DIRECTORIES 2....env目录,而不是常见/usr/、/usr/local等目录,使用cmake进行编译时需要注意头文件文件目录设置。...cmake 添加头文件目录,链接动态、静态 罗列一下cmake常用命令。 CMake支持大写、小写、混合大小写命令。 1....(“/home/server/third/lib/libcommon.a”) # 下面的例子,只有名,cmake会自动去所包含目录搜索link_libraries(iconv)# 传入变量link_libraries...不熟悉命令可以去查找文档,贴个目前最新cmake3.19官方帮助文档地址 https://cmake.org/cmake/help/v3.19/index.html 参考资料 cmake 添加头文件目录

23.2K11

详细分析一个ROS2 CMakeLists.txt文件

ROS2构建系统ament_cmake是基于CMake改进而来。本篇文章我们详细介绍一下ament_cmake常用语句。...图片 一个功能包构建信息将会包含在CMakeLists.txt和package.xml这两个文件中。...可以看到,上面使用了两个不同语句来添加依赖。ament_target_dependencies是官方推荐方式去添加依赖项。它将使依赖项头文件和自身依赖项被正常找到。...若功能包有多个,它也将一并包含。 target_link_libraries添加依赖项目时需写明具体名称。也就是说,添加每一条都是一个。...ament_export_include_directories(include) 这条语句标记该功能包头文件位置,以便其他功能包要依赖该功能包时能顺利找到对应头文件

2.2K50

干活|快速了解如何编写CMakeLists.txt文件?

2.1 如果包含OpenCV时 set(OpenCV_DIR "/usr/local/include/opencv3.2.0/share/OpenCV") find_package(OpenCV...2.2 如果包含第三方,该为源码形式(.h和.cpp),非动态链接 ? 此处以在工程中添加词袋DBoW2为例,这里DBoW2是以源码形式包含,也即未编译成.so文件。 ?...2.2.1 包含第三头文件 #设置.h文件对应路径 set( DBoW2_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/ThirdParty/DBow-master/include...为了防止在include层找不到,继续往下一层路径include/DBoW2/路径下查找,这是为了防止某些文件包含路径不一致导致头文件查找错误。 2.2.2 包含第三方cpp文件 ? ?...三 一个简单CMakeLists.txt文件demo 该demo中相较于上述总结添加,还额外包含了DLib

2K10

cmake:find_package查找pthread for win32实现脚本

https://blog.csdn.net/10km/article/details/82975800 pthread for win32本身没有提供find_package脚本,cmake...官方也没有提供,所以如果在cmake中要查找pthread for win32,就得自己实现,我参照FindJPEG.cmake自己写了个查找脚本FindPTHREADW32。...cmake官方提供FindJPEG.cmake非常简单,只输出了include文件夹位置和JPEG文件(JPEG_INCLUDE_DIR和JPEG_LIBRARIES),在写FindPTHREADW32...时,为了更方便引用,在输出PTHREADW32_INCLUDE_DIR和PTHREADW32_LIBRARY变量基础上,还提供了imported target:pthreadw32, 有了imported...target定义,在cmake脚本中引用更加方便,示例如下: if(WIN32) find_package(PTHREADW32 REQUIRED) endif(WIN32) # 为${_target

87810

CentOS7.8下编译muduo找不到Boost报错解决方法

从错误信息可以看出找不到Boost头文件所在路径,于是我查看了一下muduo源代码根目录下CMakeLists.txt文件: cmake_minimum_required(VERSION 2.6)...很是纳闷,估计是/usr/local/boost目录不是默认安装目录所以会导致这个问题吧,最后找到了如下两篇博客: Linux下使用CMake进行编译时候寻找Boost cmake使用boost...根据简书上这篇博客Linux下使用CMake进行编译时候寻找Boost ?...所以解决办法很明了了,既然muduo找不到我安装boost1.69.0头文件所在目录,那么我修改一下CMakeLists.txt文件,在find_package(Boost REQUIRED)这句查找...Boost之前,手动设置boost根目录、头文件、lib文件所在目录就好了即: 可以在搜索package之前,通过设置一些变量来帮助boost查找 BOOST_ROOT

1.8K20

【Android OpenCV】Visual Studio 创建支持 OpenCV CMake 工程 ② ( VS 中创建 CMake 工程 | CMake 工程中配置 OpenCV 头文件 )

文章目录 一、创建 CMake 工程 二、在 Visual Studio CMake 项目中配置 OpenCV 1、CMakeLists.txt 配置文件说明 2、OpenCV 头文件配置..., 项目位置 , 解决方案名称 ; 创建完毕 CMake 项目如下 : 运行解决方案 , 项目运行成功 ; 二、在 Visual Studio CMake 项目中配置 OpenCV -..., 不是工程根目录文件 ; 在 根目录下 CMakeLists.txt 是 顶层 CMake 项目文件,在此处执行全局配置并包含子项目。...2、OpenCV 头文件配置 在上一篇博客 【Android OpenCV】Visual Studio 创建支持 OpenCV CMake 工程 ① ( 下载 OpenCV | Windows...中安装 OpenCV ) 中 , 在 Windows 平台 Y:\001_DevelopTools\032_OpenCV\opencv 目录 , 安装了 OpenCV , 其头文件在如下两个目录中

2K20

CMake 秘籍(二)

ON) 由于我们希望使用 Eigen ,因此我们需要在系统上找到其头文件find_package(Eigen3 3.3 REQUIRED CONFIG) 我们包含CheckCXXCompilerFlag.cmake...现在这是一个必需依赖项: find_package(PythonInterp REQUIRED) 找到 Python 头文件。...准备工作 C 和 C++程序可以通过包含omp.h头文件并链接正确来访问 OpenMP 功能。编译器将根据性能关键部分之前预处理器指令生成并行代码。...头文件和 Fortran 90 模块。 编译器包装器,它调用用于构建 MPI 编译器,并带有额外命令行参数来处理包含目录和。...我们已经使用find_path来找到头文件完整路径,并使用find_library来找到一个CMake 还提供了find_file、find_program和find_package

42020

使用Cmake生成跨平台项目编译解决方案

add_library(SecondLibrary test.cpp app_util.h app_util.cpp)     默认是静态,也可以显式设置是否为静态、动态或者是模块。.../pbase/src" pbase_lib_src_files)     add_library(pbase ${pbase_lib_src_files})     除了添加文件目录外,我们经常还需要包含第三方...(头文件文件)等需求,添加头文件目录功能如下:     include_directories函数用于添加头文件包含目录。     ...find_package可以根据cmake内置.cmake脚本去找相应模块,调用了find_package成功之后,会有相应变量“生成”有效。     ...参数中TARGETS后面跟就是我们通过ADD_EXECUTABLE或者ADD_LIBRARY定义目标文件,可能是可执行二进制、动态、静态

5.3K20

使用OSQP解决二次凸优化(QP)问题

将很多实际问题进行数学建模,然后转成凸优化问题。这样就能解了。这里说明一下这样思路。 如何解二次凸优化(QP)问题 这里介绍如何使用OSQP进行求解。 我已经将依赖合在一起了。...int NumberOfConstraints = 4; //A矩阵行数 遇到问题 编译osqp-eigen时报下面的错误: CMake Error at cmake/OsqpEigenDependencies.cmake...usr/local/include/OsqpEigen/Constants.hpp:12:18: fatal error: osqp.h: No such file or directory 这是因为头文件包含路径有问题...按下图方式更改osqp-eigen头文件,再重新编译安装。...图片 Solver.tpp文件中对osqp头文件引用要改成下面的方式 #include #include 运行程序链接osqp时报错

2.7K00

CMake基础

文件夹下了,里面的 CMakeLists.txt 定义了 hellolib 生成规则 要在根目录使用他,可以用 CMake add_subdirectory 添加子目录,子目录也包含一个 CMakeLists.txt...最友好一类莫过于纯头文件了,这里是一些好用 header-only : 1.nothings/stb - 大名鼎鼎 stb_image 系列,涵盖图像,声音,字体等,只需单头文件!.../glfw - OpenGL 窗口和上下文管理 10.libigl/libigl - 各种图形学算法大合集 引用系统中预安装第三方: 可以通过 find_package 命令寻找系统中包/find_package...现代 CMake 认为一个包 (package) 可以提供多个,又称组件 (components),比如 TBB 这个包,就包含了 tbb, tbbmalloc, tbbmalloc_proxy 这三个组件...,而包管理器作者为 find_package 编写脚本(例如/usr/lib/cmake/TBB/TBBConfig.cmake)能够自动查找所有依赖,并利用刚刚提到 PUBLIC PRIVATE

1.9K20

cmake:Windows编译支持HTTPScurlfind_package查找CURL时需要注意问题

curl是一个成熟HTTP client,现在windows平台下可以使用cmake在命令行完成编译。...curl了 一般我们会在cmake脚本中通过find_package查找curlfind_package(CURL) 一般来说这样也没问题,但如果你是像博主一样使用自己编译curl静态。...模式查找 find_package(CURL) endif() 因为cmake本身提供了Module方式查找CURL脚本,调用find_package时如果不指定CONFIG模式,默认是以MODULE...CURLTarget.cmake 也许你会想问为什么CONFIG模式能正确找到静态编译CURL依赖?...而cmake内置MODULE方式查找CURL脚本(cmake-3.17.1-win64-x64/share/cmake-3.17/Modules/FindCURL.cmake)2是按搜索CURL动态方式来实现

1.6K40

CMake 秘籍(五)

我们还使用FortranCInterface_HEADER函数来生成包含头文件,以处理 Fortran 子程序符号修饰。...与源文件一样,包含目录、编译定义和选项,当与target_link_libraries一起使用时,这些属性含义保持不变: 使用PRIVATE属性,被链接到当前目标,而不会被链接到以它作为依赖其他目标...使用INTERFACE属性,被链接到以当前目标作为依赖目标。 使用PUBLIC属性,将被链接到当前目标以及任何以它作为依赖其他目标。...使用以下命令搜索 Python 开发头文件find_package(PythonInterp REQUIRED) find_package(PythonLibs ${PYTHON_VERSION_MAJOR...我们只需要向 Python CFFI 层提供描述 C 接口头文件包含符号共享

42920
领券