首页
学习
活动
专区
工具
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....对于经常会用到 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.8K20

深入浅出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.2K41

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.8K20

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选项编译安装位置...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

60620

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

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以及各种demotarget。...添加: f(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/tests") add_subdirectory(tests/cefsimple) # cefsimple add_subdirectory

68220

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(<name...使用样例: find_package(OpenSSL REQUIRED) ---- (18) find_library 含义:查找依赖 语法: find_library ( name1 [...---- --CMAKE_CURRENT_LIST_LINE 当前正在处理文件行号 ---- --CMAKE_MODULE_PATH 提供find_package搜索第三方使用路径 ----

2.2K20

使用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.3K20

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(),使用$和$

30800

【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 操作编译

97900

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

CMake编写总结

CMake 并不直接建构出最终软件,而是产生标准建构档(如 Unix Makefile 或 Windows Visual C projects/workspaces),然后再依一般建构方式使用...这使得熟悉某个集成开发环境(IDE)开发者可以用标准方式建构他软件,这种可以使用各平台原生建构系统能力是 CMake 和 SCons 等其他类似系统区别之处。...复杂(多文件夹)C++项目写CMakeLists.txt 复杂项目示例 一般有较多文件项目都是使用多文件夹进行管理项目源文件使用多个不同级目录下保存源文件管理方式使用CMake生成makefile...CMake生成makefile了 qt项目编写CMake qt项目需要添加相应,只需要将一些配置项添加在源码目录CMakeLists.txt配置文件即可 #set minimum CMake compile...在当前文件夹下使用一下命令可以生成Makefile: cmake 但是,如此生成的话会产生很多中间文件,从而导致了当前文件夹文件过多,再次编辑文件时候会很难找到确切文件状况,这就是污染项目结构

1.1K10
领券