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

如何设置CMakeLists.txt以在非默认路径中查找.PC文件(带有pkg_search_module的pkg-config)?

要在非默认路径中查找 .PC 文件,可以通过设置 CMakeLists.txt 文件来实现。下面是一种设置方式:

  1. 首先,在 CMakeLists.txt 文件的开头,添加以下代码,定义需要查找的路径:
代码语言:txt
复制
set(CMAKE_PREFIX_PATH "/path/to/custom/dir1;/path/to/custom/dir2")

其中,/path/to/custom/dir1/path/to/custom/dir2 是需要自定义的路径,用于搜索 .PC 文件。

  1. 然后,在需要使用 pkg-config 进行依赖检查的地方,使用 pkg_search_module 函数来查找依赖:
代码语言:txt
复制
find_package(PkgConfig REQUIRED)
pkg_search_module(MY_LIBRARY REQUIRED my_library)

其中,MY_LIBRARY 是依赖的名称,my_library 是需要查找的 .PC 文件的名称。

  1. 最后,将找到的依赖链接到目标中:
代码语言:txt
复制
target_link_libraries(your_target ${MY_LIBRARY_LIBRARIES})

上述代码中,your_target 是你的目标名称,${MY_LIBRARY_LIBRARIES} 是找到的依赖库的变量。

这样,当使用 cmake 构建项目时,CMake 将在自定义的路径中查找 .PC 文件,并将找到的依赖链接到你的目标中。

注意:需要保证自定义的路径中包含正确的 .PC 文件,并且 .PC 文件中包含了正确的依赖信息。

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

相关·内容

CMake 秘籍(二)

在本章中,我们将讨论必要的工具并发现 CMake 命令的查找家族: find_file来查找一个指定文件的完整路径 find_library来查找一个库 find_package来查找并加载来自外部项目的设置...在这种情况下,我们有两个选择: 依赖pkg-config实用程序来发现系统上的包。这依赖于包供应商在.pc配置文件中分发有关其包的元数据。...函数来搜索任何带有包配置.pc文件的库或程序。...工作原理 一旦找到pkg-config,CMake 将提供两个函数来封装这个程序提供的功能: pkg_check_modules,用于在传递的列表中查找所有模块(库和/或程序) pkg_search_module...本配方补充了之前的配方,检测外部库:I. 使用 pkg-config。我们将展示如何编写一个基本的查找模块来定位系统上的 ZeroMQ 消息库,以便在非 Unix 操作系统上进行库检测。

62520

【Linux】《how linux work》第十六章 从 C 源代码编译软件入门

它们带有一个脚本或配置文件(如 configure 或 CMakeLists.txt),以帮助根据您的系统设置和配置选项从 Makefile.in 生成 Makefile。...你可以修改这个文件,例如,通过在库标志中添加-Wl,-rpath=${libdir}来设置运行时动态链接器路径。然而,更重要的问题是pkg-config如何首次找到.pc文件。...默认情况下,pkg-config在其装前缀的lib/pkgconfig目录中查找。...不幸的是,默认情况下,pkg-config不会读取安装前缀之外的任何.pc文件。...从实际的.pc文件创建符号链接(或复制)到中央pkgconfig目录。设置PKG_CONFIG_PATH环境变量以包括任何额外的pkgconfig目录。这种策略在系统范围内效果不佳。

10510
  • Ubuntu 18.04安装OpenCV4.0和环境配置

    命令说明: -D OPENCV_GENERATE_PKGCONFIG=YES:OpenCV4以上版本默认不使用pkg-config,该编译选项开启生成opencv4.pc文件,支持pkg-config功能...3 OpenCV配置环境 3.1 pkg-config环境 配置OpenCV 的 pgk-config环境 找到opencv4.pc文件: $ sudo find / -iname opencv4.pc...$ sudo vim /etc/ld.so.conf.d/opencv4.conf 在该文件(可能是空文件)末尾加上: /usr/local/opencv4/lib 再执行以下命令使刚才配置的路径生效:...文件名为opencv4.pc,所以需要对当前目录下的Malefile文件进行修改: $ vim Makefile 修改后的内容为: CXX ?...4.2 通过Cmake测试 因为我们更改了opencv的安装路径(/usr/local/opencv4),所以测试前我们需要在CMakeLists.txt文件的14行find_package(OpenCV

    4.1K22

    WebAssembly实战-在浏览器中使用ImageMagick

    使用可以写一本书,本次我们主要关注生成静态库、查找依赖、查找头文件的配置。...CPPFLAG :预编译参数,预编译主要涉及头文件的查找,因此我们要把之前编译的几个库的头文件路径添加进去。...PKG_CHECK_MODULES() 调用 pkg-config 工具查找格式为 *.pc 的配置文件,从中获取组件信息。我们可以看到,zlib,libpng 等下面都有生成的 *.pc 文件。...因此我们只要给 pkg-config 指定搜索路径就可以了,指定搜索路径的方式是添加参数 PKG_CONFIG_PATH。...MEMFS 是在内存中建立的虚拟文件系统。IDBFS 是基于 IndexDB 的虚拟文件系统。胶水 js wasm-im.js 中同样包含了对虚拟文件系统的封装,默认使用 MEMFS。

    7.2K42

    CMake 秘籍(六)

    我们还展示了如何从相同的源文件构建静态和共享库。在本章中,我们将更深入地讨论并正式化安装时发生的事情。...但是,在设置动态共享对象的RPATH时应该选择哪个路径?我们需要确保无论是在构建树还是在安装树中运行可执行文件,它总是能找到正确的共享库。...这是通过为hello-world_wDSO目标设置RPATH相关属性来实现的,以便查找相对于可执行文件本身位置的路径,无论是通过$ORIGIN(在 GNU/Linux 上)还是@loader_path(...在 Linux 上使用 ldd 工具,我们可以检查构建树中的 hello-world_wDSO 可执行文件,以查看加载器将在哪里查找 libmessage.so: libmessage.so.1 =>...该文件将包含我们导出的目标。我们还添加了一个测试,以检查项目的安装和导出是否按预期工作。 如何操作 再次,根CMakeLists.txt文件与前一个食谱相比未更改。

    40800

    pkg-config 用法

    在进行使用fuse 2.9写程序的时候,遇到了pkg-config 命令和 .pc 文件。本篇博客就具体说明一下pkg-config 命令是什么?...pkg-config命令是通过查询XXX.pc文件而知道这些的。我们所需要做的是,写一个属于自己的库的.pc文件。         但pkg-config又是如何找到所需的.pc文件呢?...这环境变量写明.pc文件的路径,pkg-config命令会读取这个环境变量的内容,这样就知道pc文件了。 查看 环境变量 ?         ...但如果有多个.pc文件,那么pkg-config又怎么能正确找到我想要的那个呢?这就需要我们在使用pkg-config命令的时候去指定。...比如$gcc main.c `pkg-config --cflags --libs gtk+-2.0` -o main就指定了要查找的.pc文件是gtk+-2.0.pc。

    2K20

    Linux下使用自定义路径来运行OpenCV

    我之前写过一篇在Linux下编译OpenCV的博客,大家可以参考下,我这里只记录与其中不同的部分。...修改lib和include,增加OpenCV的目录 为了在编译的时候找到我们的OpenCV,需要修改lib和include路径,把OpenCV的目录加到里面去。...修改PKG_CONFIG_PATH环境变量 这个环境变量是给pkg-config这个工具增加额外的查找目录的,pkg-config会默认查找/usr/lib/pkgconfig和/usr/share/pkgconfig...下的.pc配置文件,额外的目录通过设置PKG_CONFIG_PATH来增加。...我们这里将自己的OpenCV放进去,即可: export PKG_CONFIG_PATH=/home/username/local:$PKG_CONFIG_PATH 检查设置是否正确 如何验证编译别的库的时候找到的是我们编译的

    2.3K10

    cmake学习

    /可执行文件 #运行可执行文件 CMakeLists.txt通用设置: (1)cmake版本号 (2)工程名称 # $ cmake --version cmake_minimum_required...多个cpp文件 + 头文件 cmake思路 过程: cpp文件生成可执行文件 可执行文件链接头文件 #创建一个带有所有cpp文件链接的源变量以编译 set(SOURCES src/Hello.cpp...src/main.cpp ) #在SOURCES变量中设置特定文件名的另一种方法是使用GLOB命令使用通配符模式匹配来查找文件。...函数使编译器意识到它们 在最后的g++编译过程,会自动链接到头文件路径 target_include_directories(hello_headers PRIVATE ${PROJECT_SOURCE_DIR...用户看了头文件就知道如何使用静态库文件了,即如何使用函数。 因此最后只需要将main.c、head.h和库文件给用户即可。

    2K90

    Linux编译安装安Python3.73.8出现_ssl模块错误| python运行ssl模块出现ModuleNotFoundError

    大多数程序和库在编译时默认的优化级别是”2″(使用”-O2″选项)并且带有调试符号来编 译,也就是 CFLAGS=”-O2 -g”,....PKG_CONFIG_PATH:它指定pkg-config将在其中搜索其.pc文件的其他路径。此变量用于增强pkg-config的默认搜索路径。...但是,某些本地模块可能安装在不同的前缀中,例如/usr/local。在这种情况下,必须预先设置搜索路径,以便pkg-config可以找到.pc文件。...pkg-config程序用于检索有关系统中已安装库的信息。 pkg-config的主要用途是提供编译程序和链接到库的必要细节。此元数据存储在pkg-config文件中。...这些文件具有后缀.pc,并位于pkg-config工具已知的特定位置。

    8.2K41

    面向 C++ 的现代 CMake 教程(三)

    搜索将从存储在CMAKE_MODULE_PATH变量中的路径开始(默认情况下这个变量是空的)。当项目想要添加和使用外部查找模块时,这个变量可以被项目配置。...换句话说,它实现了以下功能: 查找库和编译器的所在位置 提供辅助函数,教会 CMake 如何调用.proto文件的定制编译器 添加包含包含和链接所需路径的变量 在大多数情况下,当你调用...尽管 PkgConfig 极其易于使用,但其功能却相当有限: 检查系统中是否存在库,并且是否提供了与之一起的.pc文件 检查是否有一个库的足够新版本可用 通过运行pkg-config --...,您的构建系统需要在操作系统中找到pkg-config可执行文件,运行它几次,并提供适当的参数,然后将响应存储在变量中,以便稍后传递给编译器。...在 CMake 中我们已经知道如何做到这一点——扫描已知存储辅助工具的路径以检查是否安装了 PkgConfig,然后使用几个exec_program()命令来发现如何链接依赖项。

    67200

    Linux动态库管理:pkg-config

    引言 之前的文章中,我们探讨了如何添加自定义的动态库路径、查看现有动态库目录以及一些实用技巧。...本文章将专注于pkg-config这一方面,这是一个用于管理库文件、头文件和编译选项的工具,经常出现在动态库的使用场景中。...pkg-config简介 pkg-config是一个用来帮助我们添加编译时和链接时的标志的工具。当我们在开发使用某个库的应用程序时,通常需要指定这个库的头文件和库文件的路径。...pkg-config的配置文件和路径 通常,pkg-config的配置文件(.pc文件)存放在/usr/lib/pkgconfig、/usr/share/pkgconfig或/usr/local/lib...在动态库开发中,可以为库创建一个.pc文件,并将其放入pkgconfig目录中。

    2.7K70

    基于EasyNVR摄像机无插件直播流媒体服务器实现文字滤镜处理功能

    从ffbuild/config.log 中看到是pk-config这个工具在查找一个*.pc的文件,比如freetype就查找的是freetype2.pc这个文件。 ?...从命令行模式进入到/usr/lib/和/usr/local/lib/下,查找是否有一个pkgconfig的文件夹,找到后,看是否有需要的哪个后缀名为pc的文件,如下图所 ?...存在查找的pc 问题解决: 1)执行export命令把这个路径export出来: export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig.../ 注意上述命令中是/usr/local/lib/pkgconfig,这个每个人的路径都不相同,不能设置错了。...=/usr/local/进行指定目录,一般默认即可 4)查询下编译的ffmpeg是否包含freetype功能模块 ?

    66720

    CMake用法,这篇文章讲全了

    单文件 假设工程中只有main.cpp一个文件,文件夹的布局如下: . ├── CMakeLists.txt └── main.cpp 那么该如何使用书写其CMakeLists文件呢,如下为一个简单的CMakeLists.txt...在main.cpp文件夹中使用func文件提供的add方法,文件夹布局如下: ├── CMakeLists.txt ├── func.h ├── func.cpp └── main.cpp 其CMakeLists.txt...# 在当前目录中查找源文件,并将它们添加到SOURCES变量中 aux_source_directory(....引用第三方库(静态库) 在实际开发中,往往需要依赖外部库。以静态库为例,考虑引入其他同事提供的库func.lib,其配套的头文件为func.h,同时,生成的动态库名称为BirdEngine。...总结 本文结合实际场景讲解CMakeLists.txt文件的组织,包括单文件、多文件、多文件夹项目构建,以及如何灵活地集成和管理第三方库。

    25110

    cmake 简介2021-10-03

    在工程中查找并使用其他程序库的方法 在开发软件的时候我们会用到一些函数库,这些函数库在不同的系统中安装的位置可能不同,编译的时候需要首先找到这些软件包的头文件以及链接库所在的目录以便生成编译选项...该命令在参数 path* 指示的目录中查找文件 name1 并将查找到的路径保存在变量 VAR 中。...清单5第3-8行的意思是在 /usr/include/ 和 /usr/local/include/ 中查找文件db_cxx.h ,并将 db_cxx.h 所在的路径保存在 LIBDB_CXX_INCLUDE_DIR...该命令在参数 path* 指示的目录中查找文件 name1 并将查找到的路径保存在变量 VAR 中。...清单5第3-8行的意思是在 /usr/include/ 和 /usr/local/include/ 中查找文件db_cxx.h ,并将 db_cxx.h 所在的路径保存在 LIBDB_CXX_INCLUDE_DIR

    36420

    记录一下踩坑(ERROR: x264 not found using pkg-config)

    一.编译x264(在编译前确保安装了pkg-config,默认在/usr/share下)   1.下载x264源代码:(我下载到了~/Downloads下,各位随意就好)     git clone https...prefix=/usr/local/x264     make -j16(具体看自己电脑几个线程)     sudo make install     注:prefix用来指定bin,include,lib文件夹的生成位置...;如果不指定,默认安装在/usr/local下   4.重点来了!!!...【ERROR: x264 not found using pkg-config】     如果使用prefix指定了以上路径,一定要进行以下操作,否则编译ffmpeg时会出上述问题     在/usr/...local/x264/lib/pkgconfig/下有一个x264.pc文件,将它移动到/usr/share/pkgconfig下【pkg-config会搜索这个路径下的.pc文件】      sudo

    4.2K40

    CMake简易指南

    :用于指定交叉编译工具链,一般用于非本地平台编译,如 Android,ARM 平台编译等-DKey=Value:用于配置CMakeLists.txt或者工具链中的option选项等cmake 执行配置时从指定路径下的...所以遇到一些非预期错误时,请先删除缓存路径下的CMakeCache.txt文件。...mylib)每一个add_subdirectory(subpath [subpath])都会在缓存路径新建一个对应的文件夹,定义在/CMakeLists.txt中的target产物也在该缓存文件夹平台差分跨平台项目中通常会遇到不同平台参与编译的头文件不一样...,cmake 中变量分为常规变量、缓存变量和环境变量,普通变量直接设置尽在当前 CMakeLists.txt 及子项目(通过 add_subdirectory 添加的项目)中生效,可取消设置,缓存变量则会写到...交叉编译除了可是使用工具链,也可以在配置阶段通过参数指定编译器等信息实现交叉编译;工具链除了可以用于交叉编译,也可用于编译系统扩展,如:vcpkg 中可用于查找内置的三方库的工具链文件扩展工具链微软开源项目中的工具链文件

    87350
    领券