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

cmake对find_library名称使用通配符选项

CMake是一个跨平台的自动化构建系统,用于管理项目的构建过程。find_library命令在CMake中用于定位库文件。当需要查找多个库文件或者库文件的名称不确定时,可以使用通配符选项。

基础概念

find_library命令的基本语法如下:

代码语言:txt
复制
find_library(<VAR> name | NAMES name1 [name2 ...] [HINTS path1 [path2 ...]] [PATHS path1 [path2 ...]] [REGISTRY_VIEW (64|32|default)]
              [NO_DEFAULT_PATH] [NO_CMAKE_PATH] [NO_CMAKE_ENVIRONMENT_PATH]
              [NO_SYSTEM_ENVIRONMENT_PATH] [NO_CMAKE_SYSTEM_PATH]
              [CMAKE_FIND_ROOT_PATH_BOTH | ONLY_CMAKE_FIND_ROOT_PATH | NO_CMAKE_FIND_ROOT_PATH])

其中NAMES选项用于指定库文件的名称,可以使用通配符*来匹配多个库文件。

相关优势

使用通配符选项的优势在于:

  • 灵活性:可以匹配多个库文件,适用于库文件命名不固定或有多个版本的情况。
  • 简化配置:减少了需要手动指定每个库文件的繁琐工作。

类型

通配符选项主要应用于库文件的搜索,可以匹配不同名称的库文件。

应用场景

假设你有一个项目依赖于多个版本的OpenSSL库,或者库文件的命名包含版本号,如libssl.so.1.1libssl.so.1.0.0等。你可以使用通配符来查找这些库文件:

代码语言:txt
复制
find_library(OPENSSL_LIBRARIES NAMES ssl crypto)

这将会搜索名为sslcrypto的库文件,无论它们的版本如何。

遇到的问题及解决方法

如果你在使用find_library时遇到找不到库文件的问题,可能的原因包括:

  • 库文件未安装:确保所需的库文件已经安装在系统中。
  • 路径配置错误:检查HINTSPATHS选项是否正确指定了库文件的搜索路径。
  • 命名不匹配:确保NAMES选项中的名称与实际库文件的名称匹配。

解决方法:

  1. 检查库文件安装
  2. 检查库文件安装
  3. 指定搜索路径
  4. 指定搜索路径
  5. 调试信息: 使用message命令输出调试信息,检查CMake的搜索过程:
  6. 调试信息: 使用message命令输出调试信息,检查CMake的搜索过程:

通过这些方法,你可以更好地理解和解决在使用find_library时遇到的问题。

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

相关·内容

Linux下CMake简明教程

也可以,那么库的名称就是add_library里定义的名称,只是连续2次使用add_library指定库名称时(第一个参数),这个名称不能相同,而set_target_properties可以把名称设置为相同...---- 七 库进行链接 既然我们已经生成了库,那么就进行链接测试下。...: 把目标文件与库文件进行链接 使用find_library的好处是在执行cmake ..时就会去查找库是否存在,这样可以提前发现错误,不用等到链接时。...---- 八 添加编译选项 有时编译程序时想添加一些编译选项,如-Wall,-std=c++11等,就可以使用add_compile_options来进行操作。..... && make命令,就可以在bin目录下得到main的elf文件 ---- 九 添加控制选项 有时希望在编译代码时只编译一些指定的源码,可以使用cmake的option命令,主要遇到的情况分为2

1.9K10
  • 详解AndroidStudio3.0开发调试安卓NDK的C++代码

    因为印象中是有过该选项的,找了半天没找到。 ? 后来无意间拖了下窗口大小,原来是被隐藏了,真特么坑。 ? 新建一个测试项目,勾选Include C++ Support 选项,看看工程上有哪些不同。...CMake verifies that the library exists before # completing its build. find_library( # Sets the name of...*星号通配符的方式): file(GLOB native_srcs "src/main/cpp/*.cpp" "src/main/cpp/dalvik/*.cpp" "src/main/cpp/art/...三、总结 能支持C++代码的动态调试,无疑是非常强大的功能,关键现在AndroidStudioC++代码在编辑器也支持的很好,所以总体是建议迁移过来的。...VS的方法参见:使用VisualStudio高效开发调试AndroidNDK 以上就是本文的全部内容,希望大家的学习有所帮助。

    1.6K20

    关于 CMake 使用,看这一篇可能就够了

    一、Cmake 简介 cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来软件编译过程进行控制。 二、常用命令 1....:返回通过 project 命令定义的项目名称 CMAKE_CURRENT_SOURCE_DIR:当前处理的 CMakeLists.txt 所在的路径 CMAKE_CURRENT_BINARY_DIR:...:cmake 补丁等级,比如 3.4.1 中的 1 ­CMAKE_SYSTEM:系统名称,比如 Linux-­2.6.22 ­CMAKE_SYSTEM_NAME:不包含版本的系统名,比如 Linux ­...主要开关选项 BUILD_SHARED_LIBS:这个开关用来控制默认的库编译方式,如果不进行设置,使用 add_library 又没有指定库类型的情况下,默认编译生成的库都是静态库。...如果 set(BUILD_SHARED_LIBS ON) 后,默认生成的为动态库 CMAKE_C_FLAGS:设置 C 编译选项,也可以通过指令 add_definitions() 添加 CMAKE_CXX_FLAGS

    5.4K25

    CMakeLists.txt 语法介绍与实例演练

    一、Cmake 简介 cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来软件编译过程进行控制。 二、常用命令 1....主要开关选项 BUILD_SHARED_LIBS:这个开关用来控制默认的库编译方式,如果不进行设置,使用 add_library 又没有指定库类型的情况下,默认编译生成的库都是静态库。...自定义编译选项 cmake 允许为项目增加编译选项,从而可以根据用户的环境和需求选择最合适的编译方案。...例如,可以将 MathFunctions 库设为一个可选的库,如果该选项为 ON ,就使用该库定义的数学函数来进行运算,否则就调用标准库中的数学函数库。...option 命令添加了一个 USE_MYMATH 选项,并且默认值为 ON 。根据 USE_MYMATH 变量的值来决定是否使用我们自己编写的 MathFunctions 库。

    2.3K20

    CMake 基础学习

    CMake 常用变量 使用 {}进行变量的引用。例如:message({Hello_VERSION}), Hello为工程名。CMake提供了很多有用的变量。...不会被链接到其它目标中,但是可能会在运行时使用dlopen-系列的函数动态链接 例: # create lib , 在当前cmake 中 创建一个lib,名称为model_login,SHARED...指定在编译给定目标时要使用的包含目录 # 添加头文件的路径,以便查找到头文件 : add_library 创建的target名称 或者 add_executable 创建的target名称...如果没有找到,结果变量将会是-NOTFOUND,并且在下次使用相同变量调用find_library命令时,搜索过程会再次尝试。..."-O2 -DNDEBUG " ) # release包优化 CMAKE_CXX_FLAGS 是CMake传给C++编译器的编译选项,通过设置这个值就好比 g++ -std=c++11 -g

    1.8K40

    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选项编译的库的安装位置...会创建cppredis import target,如果是MSVC编译器,还可能会创建cppredis_mt 调用示例 # include FindCppRedis.cmake module # 将 FindCppRedis.cmake...所在的文件夹添加到CMAKE_MODULE_PATH # 否则find_package(CppRedis)时找不到FindCppRedis.cmake list (APPEND CMAKE_MODULE_PATH

    65120

    CMake】Android Studio 中使用 CMake 编译单个 C++ 源文件 ( 常用的 CMake 命令解析 )

    文章目录 一、Android Studio 中使用 CMake 编译单个 C++ 源文件 二、cmake_minimum_required 命令设置最小 CMake 版本 三、project 命令设置工程名称...详细中文注释 该系列博客的应用场景是 Android Studio 下 NDK 编程 , 使用 CMake 构建 C/C++ 工程 ; 一、Android Studio 中使用 CMake 编译单个 C...} ) 下面开始逐个解析上面使用到的命令 ; CMakeList.txt 中使用到的命令一共只有 93 个, 47 个脚本命令 , 46 个工程命令 , 可以到 CMake 官方查询这些命令的用法...命令设置查找函数库 ---- find_library 命令的作用是用于搜索函数库 , 找到的函数库的全路径名称保存到第一个参数变量中 ; 搜索存储 : 搜索指定的预编译库, 并存储该预编译库的路径到变量中...log-lib # 指定 CMake 想要定位的 NDK 库名称 log ) # 指定 CMake 应该连接到目标函数库的若干函数库. # 可以链接多个函数库, 如使用

    4.3K00

    cmake基本使用

    为什么要用cmake?makefile的语法非常复杂,光文档就有200多页,使用起来不方便,只支持linux平台,而cmake语法只有几页,用法通俗易懂,上手简单,代码量少,跨平台。...这也是大多数人使用cmake的原因 cmake默认使用CMakeLists.txt文件作为编写脚本的文件,下面编写了一个简单的CMakeLists.txt #1.cmake verson,指定cmake...版本 cmake_minimum_required(VERSION 2.6) #2.project name,指定项目的名称,一般和项目的文件夹名称对应 PROJECT(main) #包含的头文件目录...详细介绍: 1.内置变量 CMAKE_C_COMPILER:指定C编译器+ CMAKE_C_FLAGS:编译C文件时的选项,如-g;也可以通过add_definitions添加编译选项 EXECUTABLE_OUTPUT_PATH...2.方法 project (HELLO) #指定项目名称,生成的VC项目的名称; ---- 使用${HELLO_SOURCE_DIR}表示项目根目录 include_directories:指定头文件的搜索路径

    1.6K31

    NDK开发(一) :NDK入门指南

    CMake 使用 lib库名称.so 的规范来为库文件命名,库名称即为我们定义的 native-lib。不过我们在Java代码中加载时,还是使用我们定义的库名称 native-lib。...src/main/cpp/hello-ndk.cpp) 使用 add_library() 向您的 CMake 构建脚本添加源文件或库时,Android Studio 还会在您同步项目后在...将 find_library() 命令添加到您的 CMake 构建脚本中以定位 NDK 库。...以 Android 特定的日志支持库 为例,为了确保您的原生库可以在 log 库中调用函数,您需要使用 CMake 构建脚本中的 target_link_libraries()命令关联库: add_library...点击 弹出菜单的第二个选项 Link C++ Project with Gradle,如图1,点击文件夹,点击 Android Studio图标的按钮可以定位到项目根目录,然后如图2 配置 CMakeLists.txt

    93140

    caffe:cmake编译指定glog,gflag路径

    使用cmake编译caffe的情况下,在 cmake生成Makefile时会自动找到系统安装的glog,gflag,但是如是我们自己编译了一个glog,gflag,并没有安装在(/usr)系统目录下,...而是放在用户目录(/home)下,要想使用这个glog,gflag版本,不做处理cmake是找不到的。...修改FindGlog.cmake,FindGFlags.cmake $caffe_root/cmake/Modules/下的FindGlog.cmake,FindGFlags.cmake中关于调用find_package...原因分析 这个问题的根本原因在于代码作者cmakefind_library的查找机制没有全搞明白 简单说就是调用find_library时,会以从一组路径中顺序查找指定的库,这有一个优先序问题...解决的办法cmake官网也给出来了,就是调用两次find_library,第一次加NO_DEFAULT_PATH,第二次则不加。

    2.9K50

    【Android NDK 开发】CMake 中查找链接 Android 自带动态库位置说明 ( ndk-bundleplatformsandroid-29arch-armusrlib )

    配置 二、CMakeLists.txt 完整带注释配置 一、BuildType#javaCompileOptions 配置 ---- 参考 【Android NDK 开发】Android Studio 使用...CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 ) 博客中的 CMake 配置的 ndk 代码 , 其中 使用find_library...-29\arch-arm\usr\lib\liblog.so # 不同的 Android 版本号 和 CPU 架构 需要到对应的目录中查找 , 此处是 29 版本 32 位 ARM 架构的日志库 find_library...log , 在 CMake 配置中 , 使用 log 名称即可 ; 二、CMakeLists.txt 完整带注释配置 ---- # 指定 CMake 最低版本 cmake_minimum_required...-29\arch-arm\usr\lib\liblog.so # 不同的 Android 版本号 和 CPU 架构 需要到对应的目录中查找 , 此处是 29 版本 32 位 ARM 架构的日志库 find_library

    1.2K10
    领券