ubuntu16.04下编写CMakeLists编译多个c++文件及添加依赖库

1、编译多个c++文件
主要参考这个链接,但是因为vocode中配置编译多个c++文件的json不好配置,所以还是按照终端输入命令的方法编译整个工程,不同的是终端借用vscode的终端,这样在调试的时候可以看到自己的代码,更加方便。在根目录执行cmake .以及make操作,生成的可执行文件在build目录下(在cmakelists里面设置),在build目录下执行进行gdb调试(在本项目中,执行的是gdbmain),然后设置断点(如 b main),再继续往下调试(r,n,s等命令),本质上还是在终端操作,但是个人感觉这样还是方便一点,虽然还是没有借助vscode进行调试,不能直观的看到各个变量的值,不能监视变量。

最后附上一张在vscode中实际操作的截图:

在这里插入图片描述
2、添加依赖库
在 cmake 的编译体系中,package 用来指代一个依赖库,包括一些头文件、动态库、静态库等等,在 CMakeFileLists.txt 中通过 find_package()命令可以很轻易实现。

比如很多同学可能会用 OpenCV 进行图像开发,它是个非常有名的开源库,它有 10 来个库文件、几十个头文件,因此如何正确引用它就是一件值得小心翼翼的事情,但好在 cmake 可以轻松搞定这件事情。
前提条件,你的 PC 上已经完全安装好了 OpenCV

DisplayImage.cpp

#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
{
    if ( argc != 2 )
    {
        printf("usage: DisplayImage.out <Image_Path>\n");
        return -1;
    }
    Mat image;
    image = imread( argv[1], 1 );
    if ( !image.data )
    {
        printf("No image data \n");
        return -1;
    }
    namedWindow("Display Image", WINDOW_AUTOSIZE );
    imshow("Display Image", image);
    waitKey(0);
    return 0;
}

下面是 CMakeFileLists.txt

cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )

然后就可以编译了。

mkdir build
cd build
cmake ..
make 
./DisplayImage  ../lena.jpg

程序就可以运行。

这个例子是 OpenCV 的官方示例。

下面需要说明的是,find_package(OpenCV REQUIRED)执行成功后,它的头文件路径,库文件路径都会被赋值。

OpenCV_INCLUDE_DIRS 是头文件路径

OpenCV_LIBS 是库文件地址

有了头文件和库文件,自然而然可以正常引用 OpenCV 了。

package 的通用套路
实际上,通过 find_package() 可以顺利查找任何符合 cmake package 标准的外部工程。

find_pacage()方法签名如下:

find_package(<package> [version] [EXACT] [QUIET] [MODULE]
             [REQUIRED] [[COMPONENTS] [components...]]
             [OPTIONAL_COMPONENTS components...]
             [NO_POLICY_SCOPE])

QUITE 参数指代,当查找出错时,屏蔽 message() 的输出。
REQUIRED 参数指代,当找不到 package 时,终止过程。

现在用 XXX 代表要查找的 package 名字

find_pacakge(XXX REQUIRED)会设置一系列变量。

XXX_FOUND 代表库是否查找成功
XXX_INCLUDE_DIRS 代表头文件的路径
XXX_LIBRARIES 代表库文件的路径
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值