cmake基础教程(上)

何为cmake

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的代码编译过程,输出各种各样的makefile或者project文件。CMake 的组态档取名为CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生makefile,然后再依一般的建构方式使用

编写一个简单的cmake

创建一个名为 CMakeLists.txt 的文件(注意 ,千万不要拼写错误),然后就可以开始编写第一个cmake了,代码如下:

# CMake的最低版本号需求
cmake_minimum_required (VERSION 2.8)

# 工程名称设置为TEST(注意并不是生成的可执行文件名)
PROJECT(TEST)

# 定义变量SRC_LIST表示源文件a.cpp
SET(SRC_LIST a.cpp)

# 生成可执行文件Test
ADD_EXECUTABLE(Test ${SRC_LIST})

PROJECT(projectname [CXX] [C] [Java])

⽤于指定⼯程名称,并可指定⼯程⽀持的语⾔(⽀持的语⾔列表可以忽略,默认⽀持所有语
⾔ ) 。

SET

用于显示定义变量,比如SET(SRC_LIST main.c)。有多个源文件,也可以定义为SET(SRC_LIST main.c a.c b.c)

ADD_EXECUTABLE([BINARY] [SOURCE_LIST])

定 义 了 这 个 ⼯ 程 会 ⽣ 成 ⼀ 个 ⽂ 件 名 为 [BINARY] 可 执 ⾏ ⽂ 件 , 相 关 的 源 ⽂ 件 是
SOURCE_LIST 中定义的源⽂件列

使用该cmake构建项目

因为构建的时候会产生大量的中间文件,一般我们会先创建一个build文件夹,在build文件夹中使用cmake命令。当前目录结构如下:

a.cpp  CMakeLists.txt  build/
						|
						|
						V
					(空目录)用于执行cmake

进入build目录中,执行命令

cmake ..

执行过会可以发现,build出现了大量的中间文件,并且生成了MakeFile,在build目录中使用命令

make

即可在该目录下生成一个可执行文件Test。至此,我们成功使用了cmake构建我们第一个项目。

优化目录结构

在实际的项目开发中,我们为了让项目的结构清晰,一般会有固定的模式来组织目录,下面给出一个典型的结构.

build/  CMakeLists.txt  src/  bin/
  |	                    |		|
  |                     |		V
  V						|		存放生成的可执行文件
 (用于执行cmake的目录)	V
 					CMakeLists.txt a.cpp(存放源文件和子CMakeLists.txt)

我们希望在顶层的 CmakeList.txt 中接着调用src/下的 CMakeLists.txt 继续去构建项目,并且将最终生成的可执行文件安装到bin/下。来看两个CMakeLists.txt的编写

# 顶层的CMakeLists.txt

cmake_minimum_required (VERSION 2.8)
PROJECT(TEST2)

# 添加子目录,会在该子目录中寻找CMakeLists.txt继续执行
ADD_SUBDIRECTORY(src)
# CMake的最低版本号需求
cmake_minimum_required (VERSION 2.8)

# 手动加入文件
SET(SRC_LIST a.cpp)

# 生成可执行文件Test
ADD_EXECUTABLE(Test ${SRC_LIST})

# 将可执行文件安装到顶层同级的bin目录下
INSTALL(TARGETS Test DESTINATION ${PROJECT_SOURCE_DIR}/bin)

ADD_SUBDIRECTORY

用于指定一个子目录,子目录下应该包含CMakeLists.txt文件和代码文件。子目录可以是相对路径也可以是绝对路径,如果是相对路径,则是相对当前目录的一个相对路径。

INSTALL

用于将生成的二进制文件,动态库,静态库等安装至指定的目录。cmake后,使用 make install 进行安装。

PROJECT_SOURCE_DIR

这是cmake预定义的变量,用于表示顶层CMakeList对应的目录

构建项目

进入build目录执行以下语句

cmake ..
make
make install

执行完毕,可以看到bin/目录下安装了Test可执行文件。

  • 27
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值