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

CMake的find_package找不到使用add_subdirectory添加的库

CMake是一个跨平台的开源构建工具,用于管理软件构建过程。它可以帮助开发人员自动化构建、测试和打包软件项目。在CMake中,find_package是一个用于查找和加载外部库的命令,而add_subdirectory用于将子目录添加到构建中。

当使用add_subdirectory添加库时,CMake会在指定的子目录中查找CMakeLists.txt文件,并执行其中的指令。如果在子目录中正确配置了库的构建和安装过程,那么在主项目中使用find_package时就能找到该库。

然而,如果CMake的find_package找不到使用add_subdirectory添加的库,可能是由于以下几个原因:

  1. 子目录中未正确配置库的构建和安装过程:在子目录的CMakeLists.txt文件中,需要使用add_library或add_executable命令来定义库的构建,并使用install命令将库安装到指定位置。如果这些步骤未正确配置,find_package可能无法找到库。
  2. 未正确设置库的安装路径:在子目录的CMakeLists.txt文件中,需要使用set命令设置库的安装路径,以便find_package能够找到安装的库。通常,库的安装路径应该是在主项目的CMakeLists.txt文件中设置的。
  3. 未正确配置库的查找路径:在主项目的CMakeLists.txt文件中,需要使用set命令设置find_package的查找路径,以便CMake能够找到子目录中安装的库。通常,查找路径应该包括子目录中库的安装路径。

为了解决这个问题,可以按照以下步骤进行操作:

  1. 确保子目录中的CMakeLists.txt文件正确配置了库的构建和安装过程,并将库安装到指定位置。
  2. 在主项目的CMakeLists.txt文件中,使用set命令设置库的安装路径,例如:set(CMAKE_INSTALL_PREFIX "/path/to/install")。
  3. 在主项目的CMakeLists.txt文件中,使用set命令设置find_package的查找路径,例如:set(CMAKE_PREFIX_PATH "/path/to/install")。
  4. 在主项目的CMakeLists.txt文件中,使用find_package命令查找并加载库,例如:find_package(LibraryName REQUIRED)。
  5. 在主项目的CMakeLists.txt文件中,使用target_link_libraries命令将库链接到目标可执行文件或库中,例如:target_link_libraries(TargetName LibraryName)。

请注意,以上步骤中的LibraryName和TargetName应替换为实际的库名称和目标名称。

对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,无法给出具体的推荐。但是,腾讯云作为一家知名的云计算服务提供商,提供了丰富的云计算产品和解决方案,可以根据具体需求在腾讯云官方网站上查找相关产品和文档。

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

相关·内容

cmake:使用find_package查找libjpeg的静态库

https://blog.csdn.net/10km/article/details/82931978 我们知道简单的使用命令find_package可以查找指定的package....对于经常会用到的 jpeg库turbojpeg,可以用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.9K20

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

但是 Makefile 的编写有时候也是一件痛苦的事情,用 CMake 可以比较轻松实现同样的目的,所以这篇博文我们讲解如何用 cmake 处理库文件的引入情况。...package 在 cmake 的编译体系中,package 用来指代一个依赖库,包括一些头文件、动态库、静态库等等,在 CMakeFileLists.txt 中通过 find_package()命令可以很轻易实现...下面需要说明的是,find_package(OpenCV REQUIRED)执行成功后,它的头文件路径,库文件路径都会被赋值。...XXX_FOUND 代表库是否查找成功 XXX_INCLUDE_DIRS 代表头文件的路径 XXX_LIBRARIES 代表库文件的路径 比如,cmake 可以很轻松引入 bzip2 find_package...当然,一个库可能由好多个组件构成,cmake 可以单独引入这些组件 find_package(Qt5 5.1.0 COMPONENTS Widgets Xml Sql) 引入了 Qt5 中的 Widgets

11.7K41
  • 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)这句查找..../ 上面4种方法中,我所熟悉的是第三种和第四种,这里我以cmake第三种为例: 注意:不论使用make还是cmake也好,注意:muduo库的路径需要根据自己编译后的路径为准。

    1.9K20

    OpenHarmony开源三方库的cmake在IDE上直接引用的问题

    ,可以在指定目录下去搜索已安装的库(三方库构建完后执行install,会生成xxx-config.cmake之类的文件在安装目录下),如果可以找到对应的库,就可以获取头文件路径以及库的路径二、add_subdirectory...DevEco Studio的native工程的C/C++部分是使用的cmake脚本来构建,开源社区上有很多C/C++三方库也是使用cmake来编译构建,这些三方库我们是否可以直接采用add_subdirectory...如果在DevEco Studio上面使用find_package,需要满足find_package的搜索条件,一、指定find_package的搜索路径这里可以使用CMAKE_FIND_ROOT_PATH...,如下图所示find_package通过这些文件来获取库的版本、库的头文件、库的名称等信息,假如没有这些文件,find_package将会找不到库。...总结一、部分开源三方库的脚本可以在DevEco Studio上直接使用这部分开源三方库没有其他库的依赖,可以直接使用add_subdirectory引用二、有依赖的三方库的脚本不能在DevEco Studio

    12910

    cmake:cpp_redis的find_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选项编译的库的安装位置...defined, 则忽略此参数 FindCppRedis.cmake 执行后输出的变量 CPPREDIS_FOUND, 找到 cpp_redis 库为true,否则为false CPPREDIS_INCLUDE_DIR...所在的文件夹添加到CMAKE_MODULE_PATH # 否则find_package(CppRedis)时找不到FindCppRedis.cmake list (APPEND CMAKE_MODULE_PATH

    66920

    使用CEF(六)— 解读CEF的cmake工程配置

    target 一般来说,我们使用CMake来构建某种产物(这里的“构建”不严谨,只是方便描述),这个产物可以是可执行二进制程序直接运行,可以是一个库文件。...在CMake中,我们一般使用target_include_directories指令来指定对应target编译过程中外部库头文件的搜索路径,以及使用target_link_libraries指令来指定链接阶段要链接哪些库文件...libcef_dll/CMakeLists.txt 现在,让我们回到cef_binary_xxx/CMakeLists.txt,在find_package(CEF)之后,紧接着的就是add_subdirectory...步骤二:通过add_subdirectory添加并管理起子模块target,包括libcef_dll_wrapper以及各种demo的target。...添加: f(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/tests") add_subdirectory(tests/cefsimple) # cefsimple add_subdirectory

    97520

    从零开始编写一个cmake构建脚本

    构建脚本,直接通过add_subdirectory()引用该三方库 add_subdirectory(xxx) # xxx是需要引入的三方库源码文件夹名字源码非cmake构建或者无法通过cmake...方式构建的,可以将引用三方库的源码添加到本三方库的构建中具体方式 set(SOURCE_NAME source1.cxx source2.cxx...) # TARGET_NAME 本库生成的库名, 通过 add_library 添加 引入三方库源码以及本库源码等生成目标TARGET_NAME引用其他三方库的二进制文件(.so)通过target_link_libraries...引用当前源码路径下的xxx库使用find_package方法来引用,此方法的使用限制参照IDE上find_package使用分析,使用方法: find_package(XXX REQUIRED)...库对外提供被find_package的能力install后,所有导出的头文件、动态库、静态库、可执行二进制、cmake文件都可以安装到指定路径下install(TARGETS ${TARGET_NAME

    15620

    CC++生态工具链——编译构建工具CMakeCMakeList初探

    CMake的使用场景: 跨平台编译运行,交叉编译。一般基于CMakeLists.txt文件定义的编译构建规则来生成目标文件和目标库。...使用样例: add_compile_options(-std=c++11) ---- (12) add_subdirectory 含义:将子目录添加到构建范围 语法: add_subdirectory(...使用样例: add_dependencies(log com_log) ---- (15) add_library 含义:添加一个库到工程中,指定这个库的源文件 语法: add_library(使用样例: find_package(OpenSSL REQUIRED) ---- (18) find_library 含义:查找依赖的库 语法: find_library ( name1 [...---- --CMAKE_CURRENT_LIST_LINE 当前正在处理的文件的行号 ---- --CMAKE_MODULE_PATH 提供find_package搜索第三方库时使用的路径 ----

    2.8K20

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

    ,需要一个能够跨平台的项目编译解决方案,经过调研之后,选择了使用cmake这个工具,本文主要讲述,使用cmake的生产项目的一些基础知识。... "${CMAKE_CXX_FLAGS_RELEASE} /MT") 6、代码控制     如果一个项目太大,文件成千上万,那么一个一个文件的添加太过于麻烦了,因此cmake使用aux_source_directory...8、添加其他的CMakeLists.txt     一个CMakeLists.txt里面的target如果要链接其他CMakeLists.txt中的target,可以使用add_subdirectory...函数,如下所示:     add_subdirectory(".....find_package可以根据cmake内置的.cmake的脚本去找相应的库的模块,调用了find_package成功之后,会有相应的变量“生成”有效。

    5.5K20

    CMake库打包以及支持find_package

    本文对CMake中库的打包,安装,导出以及支持find_package,使其能够很简单的应用到其他的项目中进行详细的总结。...CMake安装库我们需要安装的东西包括:头文件,可执行的工具以及已经编译好的库。这些都能够直接使用install()命令来直接安装。...为了使用导出功能,需要创建一个my_library.cmake文件,其中包含了所有编译和安装目标的引用,用户只需要包含这个文件就可以使用前面编译和安装的库。......)现在,用户只需要在自己的CMake项目中调用find_package(my_library REQUIRED),这个库就会被自动搜索和找到(如果该库的${CMAKE_BUILD_TYPE}类型已经被安装了...总结总结来看,为了在CMake中支持库的安装和find_package(),我们需要:改变库目标的target_include_directories(),使用$和$

    54000

    【Android 高性能音频】Oboe 开发流程 ( 导入 Oboe 库 | 使用预构建的二进制库和头文件 | 编译 Oboe 源码 )

    文章目录 一、导入 Oboe 库 二、使用预构建的二进制库和头文件 三、编译 Oboe 源代码 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : Getting Started...---- Google 官方提供了两种导入 Oboe 库的方式 : ① 预构建二进制库 : 使用 预构建的二进制库和头文件 ; ② 编译源码 : 直接 添加 Oboe 源码到工程中 , 在 Android.../oboe) ② 将 Oboe 源码目录设置为工程的子路径 : add_subdirectory 告诉 CMake 到 OBOE_DIR 路径中查找该路径下的 CMakeLists.txt 构建脚本 ,...将 Oboe 源码目录设置为工程的子路径 , # add_subdirectory 告诉 CMake 到 OBOE_DIR 路径中查找该路径下的 CMakeLists.txt 构建脚本 , # 编译该构建脚本中指定的源码...链接函数库 , native-lib 是本应用中编译的动态库 , 这里链接 log 日志库 , oboe 高性能音频库 # 该 oboe 函数库就是上面 add_subdirectory 操作编译的

    1.1K00

    CMake基础

    文件夹下了,里面的 CMakeLists.txt 定义了 hellolib 的生成规则 要在根目录使用他,可以用 CMake 的 add_subdirectory 添加子目录,子目录也包含一个 CMakeLists.txt...,其中定义的库在 add_subdirectory 之后就可以在外面使用 子目录的 CMakeLists.txt 里路径名(比如 hello.cpp)都是相对路径,这也是很方便的一点 5.子模块头文件的处理...,编译时间长 作为子模块引入: 第二友好的方式则是作为 CMake 子模块引入,也就是通过 add_subdirectory 方法就是把那个项目(以fmt为例)的源码放到你工程的根目录: 这些库能够很好地支持作为子模块引入.../glfw - OpenGL 窗口和上下文管理 10.libigl/libigl - 各种图形学算法大合集 引用系统中预安装的第三方库: 可以通过 find_package 命令寻找系统中的包/库: find_package...,而包管理器的作者为 find_package 编写的脚本(例如/usr/lib/cmake/TBB/TBBConfig.cmake)能够自动查找所有依赖,并利用刚刚提到的 PUBLIC PRIVATE

    1.9K20
    领券