cmake 构建路径_如何外部构建CMAKE工程

回归老本行,写点最近的学习体会。其实这篇总结性质的文是三周前写的。来到RM,来到实验室已经整整四周了,进入11月,会更忙吧。这篇文章大概我也会投CSDN,之前不太搞得懂CSDN的写作模板,现在比较清楚了……

/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/

周末主要鼓捣了一下cmake。

推荐一篇文章:Cmake实践,非常好。

cmake有两种构建方法,分内部和外部,我一开始在网上找到的教程都是外部构建。

具体怎么写Cmakelist如下

MAKE_MINIMUM_REQUIRED(VERSION 3.4.1)   //确定cmake最低版本需求 不写的话clion会提醒你加上,再不加终端编译时候也会提醒你,建议顺手加上。

PROJECT(test)   //确定工程名 ,指定项目的名称,项目最终编译生成的可执行文件不一定是这个项目名称  必要

MESSAGE(STATUS "Project: SERVER")

MESSAGE(STATUS "Project Directory: ${PROJECT_SOURCE_DIR}") //打印相关消息 不必要,但建议加上。

SET(CMAKE_BUILE_TYPE DEBUG/RELEASE)   //确定编译类型debug或release

SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall")   //

确定编译器 CMAKE_C_FLAGS_DEBUG            ----  C 编译器

CMAKE_CXX_FLAGS_DEBUG        ----  C++ 编译器

不必要,建议编译类型为debug,测试小程序两种的编译速度差别不大

FIND_PACKAGE( OpenCV REQUIRED ) // 必要,查找链接库,opencv编译后在系统路径里,比较方便链接,如果是一些没有添加到系统路径的库会比较麻烦,具体以后再讲。

ADD_EXECUTABLE( test test.cpp )//定义了这个工程会生成一个文件名为test的可执行文件,来源自test.cpp工程 必要。

TARGET_LINK_LIBRARIES( test ${OpenCV_LIBS})//将目标文件与库文件进行链接 必要

opencv的库编译后算是系统中的库,所以才用的${OpenCV_LIBS}。

指令是大小写无关的,参数和变量是大小写相关的。推荐全部使用大写指令。看起来舒服。

这样写完后,命令行进入文件夹两个命令

$ cmake .

$ make

这样生产的中间文件,Makefile文件和可运行文件都在一个文件夹里比较乱,外部构建看上去也更像一个工程,所以来试一下外部构建。

/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/

首先写好源码test.cpp,在文件夹里新建build src两个文件夹,build文件夹存放中间文件和最后生成的可执行文件与Makefile,在编译前这个文件夹是空的。src文件夹存放源码。我们要在根目录和src里都写cmakelist文件,但是写的不太一样。

根目录下需要写

CMAKE_MINIMUM_REQUIRED(VERSION 3.4.1)

PROJECT(test)

ADD_SUBDIRECTORY(src bin)

SET(CMAKE_BUILE_TYPE DEBUG)

SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall")

MESSAGE(STATUS "Project: SERVER")

MESSAGE(STATUS "Project Directory: ${PROJECT_SOURCE_DIR}")

这是我写的,有删有减,第三行新加的,用于添加外部项目文件夹,最后可执行文件和Makefile就在/src/bin/下第四到七行都不必要。

在src文件夹下,这样写

FIND_PACKAGE( OpenCV REQUIRED )

ADD_EXECUTABLE(test test.cpp)

TARGET_LINK_LIBRARIES( test ${OpenCV_LIBS})

用于链接库和工程的命令都在这里。

之后进入build文件夹

输入这两个命令

$ cmake ..

$ make

经过几天的测试,这样总算是成功了,网上这方面的资料基本没有。

到bin里找到可执行文件,run一下,我写的是一个canny边缘检测,成功了。

要用到其他不和系统链接的库会比较复杂,但大同小异,加几条命令就是了。

最后,cmakelist编写有顺序,不按顺序会报错。

/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/

PS:其实后来网上还是有比较详细的,但是写的是外部库,也很有参考价值吧,地址我就不贴了。

PS:师兄告诉我其实上一届RM的都不这样写工程……现在我也不这样写了。但是他们说的直接根目录写Cmakelist然后在外部直接建立打开的方法,我还是不知道……

这一周写了一个美颜的小程序,作为我们战队公众号的推送。写的很粗糙,下次有机会也贴出来吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值