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

网上东一榔头西一棒槌的太多了,而且不完整,不适合对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,以提高编译速度,后面有空尝试再来追加。

猜你喜欢

转载自blog.csdn.net/weixin_43466192/article/details/120240954#comments_22263128