Cmake 最通俗讲解

Cmake 最通俗讲解(一)

Cmake写在一个叫做CMakeLists.txt的文件里面

1. 最基本的操作

为啥说是最基本的?作为小白,在很长一段时间内,使用这些函数就已经足够。如果你也是小白一枚,就可以在这停下去学习其他知识了(比如OpenCV)。

1.1 定义最低Cmake版本

#CMake的最低版本是3.0
#如果Cmake的版本低于3.0,那就无法形成Makefile
	cmake_minimum_required(VERSION 3.0)

1.2 定义项目的名称

#项目的名称(工程名)为Work
#同时,项目的名称保存在变量PROJECT_NAME中
	project(Work)

1.3 形成可执行文件

#生成可执行文件
#第一个变量填入可执行文件名,后一个变量填入源文件
#这个的含义是编译源文件main.cpp,使之形成可执行文件main
	add_executable(main main.cpp)

1.4 创建一个库

#创建一个库
#第一个变量是库名称,后面的所有变量都是源文件
#把hello.cpp和hello.h形成hello库
#当然,我们在库名与源文件之间添加SHARED或者STATIC字样以达到生成共享(.so/.dll)或者静态库(.a/.lib)
	add_library(hello hello.cpp hello.h)

1.5 链接一个库

#链接一个库,将可执行文件链接到所需的库
#第一个变量是可执行文件,后面的所有变量是需要链接的库
	target_link_libraries(main hello)

2. 管理依赖项

限制一个项目的依赖,稍微有点用不到

2.1 最小版本依赖包检查

#依赖最小版本
#这里依赖的最小版本是 OpenCV库的3.4.6 版本,在此版本之前的库都是不能使用的
	find_package(OpenCV 3.4.6 REQUIRED)
  • 注释:find_package不仅仅有这一个作用,详情可百度。
  • 如果出现错误,则无法编译。

2.2 向环境中添加指定库的头文件和路径

通常,Linux平台是不需要这些命令行的

#向该环境中添加OpenCV的头文件
	include_directories(${OpenCV_INCLUDE_DIRS})
#向该环境中添加OpenCV的路径
	link_directories(${OpenCV_LIB_DIR})

3. 一些比较重要的函数

这个里面是一些大杂烩,所以乱炖就好,不成体系。

3.1 定义一个新的变量

#这样的话,main.cpp就变成了hh
#第一个变量是名称,后面的所有变量是添加进入的东西(各种乱七八糟的东西,例如:源文件)
#注意,后面的变量可以添加很多很多,不仅仅是一个
	set(hh main.cpp)
#在调用的时候,${hh}才是main.cpp
	add_executable(main ${hh})

3.2 发布消息

#在终端可以直接显示的消息
#在里面加入“”之后,在“”里面直接写需要的内容
	message("OpenCV VERSION: ${OpenCV_VERSION}")

4. 主项目与子项目

一般来说,我们会把一个完整的项目分开实现。这个时候,主项目与子项目就出现了。

相应的,我们要构建Cmake也是如此。(如下图)

文件的结构

4.1 所有的代码

4.1.1 主项目
#Cmake版本约束与工程构建
    cmake_minimum_required(VERSION 3.0)
    project(Bloc)

#约束OpenCV库
    find_package(OpenCV 3.4.6 REQUIRED)
    
#添加一个文件夹
    add_subdirectory(demo)

#创建可执行文件main
    add_executable(main main.cpp)
#链接可执行文件
    target_link_libraries(main ${OpenCV_LIBS} Demo)
4.1.2 子项目
#添加一个新变量——src for lib
set(demo_lib_src
    demo1.cpp
    demo2.cpp
    demo3.cpp)   

#创建一个lib
add_library(Demo ${demo_lib_src})
#确保编译器可以找到库的include文件
#CMAKE_CURRENT_SOURCE_DIR 表示的是主目录的位置
target_link_libraries(Demo PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

4.2 主项目

4.2.1 添加子文件
#括号里面直接添加文件夹(demo)
	add_subdirectories(demo)

其他函数都是我们已经提到过的
当然,仅凭这些是不能够完成一个非常漂亮的项目。但是,实现简单内容还是可以的。
————————————————————————————————————————
高山仰止,景行行止,虽不能至,然心向往之。
——《诗经·小雅》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值