CMake入门教程(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DY_1024/article/details/82940653

之前的一篇博客介绍了CMake一些简单的基础情况:CMake的简介、安装以及基本的使用

现在一起来学习一下CMakeLists的基础命令。

※※※※※※※※※※※※※※※※※※※※※※CMake的基本使用语法※※※※※※※※※※※※※※※※※※※※※※※※※※※

①CMake使用${}来获取值,但是在IF语句里面可以直接使用变量名

②环境变量使用$ENV{}来获取,设置环境变量还用:set({ENV{VAR} VALUE)来设置

③指令(参数1 参数2):参数与参数中间使用空格分开

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

首先我们需要一个的工程,作为我们需要移植或者重新生成的工程。

情况一:只有单个目录,单个源文件的工程,假设我们把这个文件叫做:Source.cpp

首次我们来编写我们的CMakeLists.txt文件

#CMake要求的最低点版本
cmake_minimum_requried(version 2.8)

#项目信息
project (Demo1)

#指定生成的目标
add_executable(Dmeo Source.cpp)                

上面出现的指令:

cmake_minimum_required:指定运行此CMakeLists.txt文件所需要的CMake的最低的版本,此时我们指定的最低的CMake版本是2.8

project:参数值是Demo,该命令表示我们要生成的项目的名称是Demo1,project参数还可以标识项目支持的语言,写法如下project(Demo1[C] [Java]),但是通常我们是将后面这些参数都省略掉,因为默认支持所有语言

add_executable():该命令表示我们使用Source.cpp源文件;来生成名为Demo的可执行文件

※※※※※※※※※※※※※指令和大小写无关,但是参数以及变量是和大小有关的※※※※※※※※※※※※※※※※※※※※

情况二:一个目录下,多个源文件工程,假设现在有两个源文件:Source1.cpp 以及 Source2.cpp

那我们的CMakeLists.txt文件就会成为下面这样:

#CMake要求的最低点版本
cmake_minimum_requried(version 2.8)

#项目信息
project (Demo1)

#指定生成的目标
add_executable(Dmeo Source1.cpp Source2.cpp)         

和之前的CMakeLists.txt对比,只有add_executable()的参数变了,因为现在我们需要依赖,两个源文件来生成可执行文件。

当然如果此时我们有很多的源文件需要我们去添加,一个一个的添加就会显的很麻烦,此时我们可以去传源文件的路径,然后CMake里面就有专门的命令来收集参数路径下面的源文件,并把它们存放到变量中,这个命令就是:aux_source_directory命令,语法如下:

aux_sourcr_directory(<dir> <variable>)

这样,我们的CMakeLists.txt就会变成:

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

# 项目信息
project (Demo)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 指定生成目标
add_executable(Demo ${DIR_SRCS})

aux_executable()参数:"."代表的是指定的源文件路径,CMake将该目录下的源文件找到之后,将其名字存储在DIR_SRCS变量里面。然后我们在之后生成指定目标的命令里面就可以直接传变量的名字就行了。

情况三:多个目录多个文件夹,根目录我们假设为:Source.cpp在./Source目录下面,但是./Source目录里面还有一个名叫:Child目录,里面存放Child.cpp工程

对于这种情况,我们首先需要一个在Source目录和Child目录都去编写一个CMakeLists.txt文件,为了方便,我们可以将Child目录下面的Child.cpp工程编译成一个静态库,然后在Source.cpp里面再去调用这个静态库,这样我们的CMakeLists.txt就是下面这样:

#CMake的最低版本
cmake_minimum_requried(VERSION 2.8)

#项目信息
project(Demo)

#查找当前目录下的所有源文件,然后将源文件名保存到变量DIR_SRCS里面
aux_source_directory(. DIR_SRCS)

#添加Child子目录
add_subdirectory(Child)

#指定生成目标
add_executable(Demo Source.cpp)

#添加链接库
target_link_libraries(Demo Child)

命令解析:

add_subdirectory:指明本项目包含的一个子目录Child,这样的话,Child下面的CMakeLists.txt文件和源码也会被处理

target_link_libraries:指明生成的Demo可执行文件需要连接一个叫做:Child的链接库

子目录Child里面的CMakeLists.txt:

#查找当前目录下的所有源文件,然后将源文件的名称储存到DIR_LIB_SRCS变量里面
aux_source_directory(. DIR_LIB_SRCS)

#生成链接库
add_library(Child DIR_LIB_SRCS)

命令解析:

add_library:将变量DIR_LIB_SRCS里面的源文件编译成静态链接库

猜你喜欢

转载自blog.csdn.net/DY_1024/article/details/82940653