CMakeList添加指定路径的库和头文件

2023-05-16

网上东一榔头西一棒槌的太多了,而且不完整,不适合对CMakeLists.txt不了解的新手
一下两方法实测有效
一.方法一
#包含ffmpeg头文件路径 这里以CMakeLists.txt为参考路径

include_directories(
  thirdPart/ffmpeg/include
)

然后在代码中直接加入头文件即可,这里要加extern “C”,因为这个搞了两个小时,一直报函数未定义的引用,以为CMakeLists.txt写的有问题,怀疑人生,有时候甚至认为自己不适合这行,对技术真是又爱又恨,这磨人的小妖精啊!

 extern "C"
{
#include "libavformat/avformat.h"
// #include "libavcodec/avcodec.h"
// #include "libavutil/avutil.h"
// #include "libswscale/swscale.h"
}

#这里以CMakeLists.txt为参考路径

file(GLOB_RECURSE ffmpeg_LIB "thirdPart/ffmpeg/lib/*.so")
target_link_libraries(${PROJECT_NAME}
{
${ffmpeg_LIB}
}

一.方法二
#包含ffmpeg头文件路径 这里以CMakeLists.txt为参考路径

include_directories(
  thirdPart/ffmpeg/include
)

然后在代码中直接extern “C”

{
#include "libavformat/avformat.h"
// #include "libavcodec/avcodec.h"
// #include "libavutil/avutil.h"
// #include "libswscale/swscale.h"
}

#添加编译时用到的库,值得注意的是,这里必须是全路径

target_link_libraries(${PROJECT_NAME}
(
/home/yqw/ws-work-ws/Get/src/thirdPart/ffmpeg/lib/libavformat.so
/home/yqw/ws-work-ws/Get/src/thirdPart/ffmpeg/lib/libswresample.so 
/home/yqw/ws-work-ws/Get/src/thirdPart/ffmpeg/lib/libavcodec.so 
/home/yqw/ws-work-ws/Get/src/thirdPart/ffmpeg/lib/libavfilter.so 
/home/yqw/ws-work-ws/Get/src/thirdPart/ffmpeg/lib/libavdevice.so 
/home/yqw/ws-work-ws/Get/src/thirdPart/ffmpeg/lib/libavutil.so 
/home/yqw/ws-work-ws/Get/src/thirdPart/ffmpeg/lib/libswscale.so
)

注意:
在CMakeLists.txt同级建立build目录,这个文件名是固定的,
打开build目录,在这个路径下执行cmake …编译CMakeLists.txt文件,然后会在这个路径下生成Makefile文件,执行make即可。
ffmpeg在编译到指定路径后,会记录这个路径用以执行make uninstall。
存疑:我用以上两种方法加入.a库时,编译器报错,并且去ffmpeg源码所在的路径中找.c文件。猜想ffmpeg在编译后,还会记录此次编译,ffmpeg源码所在的路径,而我的ffmpeg源码路径和工程文件源码在同一个工作目录下。这时候即使把源码移走,报错依然存在,并且编译器同样去已经不存在的ffmpeg源码路径。这可能是原因,应该在其他路径编译ffmpeg的源码。

追加:后面我把ffmpeg源码放到home/yqw目录下,添加.a库依然报错:
/home/yqw/ffmpe3.4.2/ffmpeg-3.4.2/libavcodec/fft_template.c:161:对‘pthread_once’未定义的引用
证明和同一个工作空间没关系,我的编译方式如下:

#!/bin/sh
cd ffmpeg-3.4.2
make clean
./configure --prefix=/home/yqw/ws-work-ws/Get/src/thirdPart/ffmpeg/ --enable-shared --disable-x86asm

#ffmpeg默认不生成.so文件
#不安装汇编编译器yasm

make -j20
make install

猜想可能和编译方式有关,没有安装yasm汇编器,yasm的目的是用汇编来编译ffmpeg,以提高编译速度,后面有空尝试再来追加。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMakeList添加指定路径的库和头文件 的相关文章

  • ROS的CmakeList写法

    catkin是当前ROS的官方编译工具 catkin编译基于CMake xff0c 源代码以package为单位组织 xff0c 每个package必须包含package xml和CMakeList txt两个文件 1 package xm
  • CMakeList.txt文件详解

    1 整体结构 CMakeList txt文件必须遵循以下的格式 xff1a 所需的CMake版本 xff08 cmake minimum required xff09 软件包的名称 xff08 project xff09 查找构建所需要的其
  • 关于package.xml和CMakeList.txt的解读

    关于package xml和CMakeList txt的解读 前言一 关于package xml文件的讲解 xff1f 二 关于CMakeList txt文件的讲解1 必需的CMake版本 xff1a cmake minimum requi
  • CMakelist.txt文件中常用部分最通俗易懂的解析(示例+解析)

    链接库是什么 xff1f 计算机中 xff0c 有些文件专门用于存储可以重复使用的代码块 xff0c 例如功能实用的函数或者类 xff0c 我们通常将它们称为库文件 xff0c 简称 库 xff08 Library xff09 myMath
  • CMakeList使用总结

    一 cmake功能介绍 cmake是跨平台编译工具 xff0c 编写简单好维护 xff0c 是make的高级用法 1 编写CMakeList txt文件 通过cmake生成Makefile文件 xff0c make生成可执行文件 静态库 共
  • CMakeList.txt

    一 Cmake 简介 cmake 是一个跨平台 开源的构建系统 它是一个集软件构建 测试 打包于一身的软件 它使用与平台和编译器独立的配置文件来对软件编译过程进行控制 二 常用命令 1 指定 cmake 的最小版本 cmake minimu
  • CMakeList.txt的指令以及实例介绍

    一 Cmake 简介 cmake xff08 Cross platform make xff09 是一个开源的跨平台自动化构建系统 xff0c 用来管理程序构建 xff0c 不依于特定的编译器 所谓的跨平台就是可以在Windows xff0
  • CMakeList 将CPP代码编译成可执行文件示例

    一 本次编译 CMakeList中用到的语法详解 1 设置cmake 版本 xff1a cmake minimum required VERSION 3 5 2 set the project name project Agent Test
  • CMakeList.txt使用指南

    cmake minimum required 设置所需的最低cmake版本 cmake minimum required VERSION major minor patch tweak FATAL ERROR execute process
  • CMakeList.txt

    一个视频讲解 http v youku com v show id XMjc1MjE0MjEwNA 61 61 html cmake 语法设置路径 xff0c 配置库 xff0c 编译器标记 xff1a https www cnblogs
  • ROS中 package.xml CMakeList.txt launch文件

    主要介绍ROS package程序包里package xml xff0c cmakelist txt xff0c launch文件 xff0c 分别介绍文件里的语法组成 xff0c 对于后续开发ROS程序有很大帮助 一个catkin程序包必
  • CLion 生成CMakeList文件和include文件不存在问题

    今天导入在Clion上导入了一个其他开发环境下开发的项目 xff0c 虽然能看得到代码 xff0c 但是也只能看得到代码了 xff0c 想要代码跳转 xff0c 查看声明啥的都看不了 xff0c 编写错误也不会提示 xff0c 也不能编译执
  • CMakeList静态库多层嵌套问题 undefined reference to

    前言 被一个问题缠绕了很长时间 xff0c 这两天花精力好好研究了一下 xff0c 总算解决了 xff0c 翻过来看 xff0c 就是自己不注意造的很多小问题 我的想法是把一些代码封装起来 xff0c 但是有些部分要求能让现场工作同事有一定
  • Pixhawk学习1——CMakeList.txt的解析

    在PX4的工程文件中 xff0c src modules下是具体的飞控代码 里面主要包含了传感器采集 姿态结算 姿态控制 xff0c 位置结算 位置控制等程序模块 在进行二次开发时 xff0c 需要添加的模块也是在这个文件夹里 每个文件夹里
  • CmakeList语法介绍引入Vcpkg与使用Vcpkg导入Opencv

    简单CmakeList txt内容 欢迎使用Markdown编辑器 cmake minimum required VERSION 3 11 引入vcpkg set CMAKE TOOLCHAIN FILE 34 CMAKE SOURCE D
  • CMake&CMakeList.txt

    1 各种关系 在各种开源项目中 xff0c 经常会发现项目中除了代码源文件 xff0c 还包含了 CMakeList txt Makefile 文件 xff0c 在项目的编译时候需要用到的命令有 cmake make 我们本次想搞清楚他们之
  • cmake之CMakelist.txt的使用

    文章目录 常用命令1 指定 cmake 的最小版本2 打印信息2 1 打印普通信息2 2 打印告警2 3 打印错误 3 项目名称4 设置变量5 查找指定的库文件6 设置包含的目录7 设置链接库搜索目录8 指定编译包含的源文件8 1 明确指定
  • CMakeList 中引用系统环境变量中的 include 文件,以及 lib 文件

    CMakeList 中引用系统环境变量中的 include 文件 xff0c 以及 lib 文件 cmake中对环境变量读写都是通过ENV前缀来访问环境变量 ENV ZLIB DIR 表示系统环境变量ZLIB DIR 所表示的路径 以ZLI
  • CMakeList

    目录 1 简介 2 常用命令 2 1 指定 cmake 的最小版本 2 2 设置项目名称 2 3 设置编译类型 2 4 指定编译包含的源文件 2 4 1 明确指定包含哪些源文件 2 4 2 搜索所有的 cpp 文件 2 4 3自定义搜索规则
  • 从零学习GCC,Makefile,CMakeList编译

    近期想系统地学习一下C 43 43 软件开发 xff0c 因此记录一下自己的学习笔记 xff0c 方便复习 大多数内容都是整理搬运别的博主文章内容 xff0c 加上自己的理解归纳 如果大家想了解更深的内容或者有不明白的地方 xff0c 可以

随机推荐