CMakeLists.txt----一点儿自己的经验教训

被CMakeLists.txt坑过数次(大多是被自己蠢哭……),把用过的命令稍微记一下。
注意:中文空格等什么诡异字符,链接库的名字不要忘记,不要写错
好记性不如烂键盘~

add_library

生成库
如:
add_library( hello_shared SHARED libhello.cpp)
用libhello.cpp生成一个名字教唆libhello_shared.so的共享库,生成静态库.a的话去掉SHARED就可以了。

include_directories

需要include的头文件的目录,放到这个里面,以空格隔开
home目录的表示$ENV{HOME}/……
如:include_directories($ENV{HOME}/projects/newVideoRetrieval/include $ENV{HOME}/projects/newVideoRetrieval/include/ffmpeg)

link_directories

需要链接的第三方库的库文件的目录(.so和.a)
如:
link_directories($ENV{HOME}/projects/newVideoRetrieval/lib $ENV{HOME}/projects/newVideoRetrieval/lib/opencv)

add_executable

目标文件名,以及生成目标文件需要用的cpp
如:
add_executable(newvideoretrieval main.cpp ${src_list} ${utils_srclist})
用多个cpp文件时,使用set将cpp文件们生成一个变量,然后直接使用这个变量的值

set

如:set(src_list Parameters.cpp VideoDecode.cpp SceneCut.cpp)
在add_executable中,直接使用${src_list}就可以了

target_link_libraries

目标需要链接的库的名字,需要放在link_directories和include_directories之后,库的名字的写法:取lib之后,扩展名之前的那一部分。
如:
target_link_libraries(newvideoretrieval ev2641cdvs rtp_base avcodec)
最前面是target的名字

使用cmake,将一堆cpp和h文件,生成一个库

坑啊~自己摸索出来的
比如说现在有一个文件夹a,里面有许多子文件夹a1,a2,a3,各包含不少cpp和h文件,将它们编译生成一个liba.so或者liba.a这样的库。

1.在a目录下自己写一个CMakeLists.txt

使用aux_source_directory命令
如:
aux_source_directory(a1 src_a)
aux_source_directory(a1/a11 src_a)
aux_source_directory(a2 src_a)
把所有包含cpp的文件夹全写上,写到最后一级目录
然后写
add_library(a SHARED ${src_a})
就写完了一个简单的CMakeLists.txt

2.编译

在CMakeLists.txt同级目录下面,即a的下一级目录
mkdir build
cd build
cmake ..
make
即可,build目录下就会出现想要生成的.so文件,用的时候注意引用头文件以及填写链接库的名字a。

记下一些经验教训以备……忘了>_<

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值