从项目开始学习CMake(1)

cmake一般可以很好的用来进行c++项目构建与编译,通过编写对应的cmakelists.txt文件,可以设置一些项目的属性以及一些依赖库,对应的源文件和头文件等,而且支持if,所以可以对平台或者一些其他选项做隔离处理

现在从项目出发,看一下一个项目中cmakelists.txt应该有什么。
一般来说,在除开资源或者配置等的文件夹中一般都有一个对应的cmakelists.txt文件进行一些相关设置

CMakeLists.txt 文件名严格区分大小写
CMake指令可以不区分大小写,大小写混写都行,每条语句不需要加分号;
参数严格区分大小写,名称只能用字母、数字、下划线、破折号
使用${}来引用 , 参数之间使用空格分割
使用 # 可以做注释

其中先从根文件夹开始
最开始往往会写上这个命令用来设定cmake的最低或者最高版本限制

cmake_minimum_required(VERSION <min>[...<max>] [FATAL_ERROR])

接下来用project设置项目名,等同于最后生成的.sln文件名

形式1project(<PROJECT-NAME> [<language-name>...])
形式2project(<PROJECT-NAME>
        [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
        [DESCRIPTION <project-description-string>]
        [HOMEPAGE_URL <url-string>]
        [LANGUAGES <language-name>...])

PROJECT_NAME : 必选——用来设置工程名,设置后,会把设置的值存储在CMAKE_PROJECT_NAME变量中
VERSION :可选,工程版本号,有主版本号、次版本号、补丁版本号
DESCRIPTION :工程简单的的描述
HOMEPAGE_URL :工程主页url
LANGUAGES :工程使用的语言,默认为C或CXX

一般来说*project(text)*就行,test就是你的工程名

接下来是set命令,比如你可以设置一些变量的值或者内容

set(<variable> <value>... [PARENT_SCOPE]) #设置普通变量
set(<variable> <value>... CACHE <type> <docstring> [FORCE]) #设置缓存条目
set(ENV{<variable>} [<value>]) #设置环境变量

一般来说,这里设置一些对应的变量需要,在根目录下这里可以设置c++标准,以及是否严格要求,如

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

接下来是include命令,这个命令可以按下方这样使用,这样的话可以把相关的一些配置区分开来,而不是一股脑的堆在一个文件,不方便阅读和维护,像如下这样操作,就可以在不同的.cmake文件中设置不同的内容。

例如你可以在ProjectConfig.cmake中设置一些项目相关的配置,比如输出路径、一些项目相关变量的命名(用上方的set)、项目编译器字符集;
而在下方的QtConfig.cmake中可以设置一些qt的相关内容,比如find_package来帮你找到工程一些依赖的qt库或者设置qt相关的变量比如版本等。
这些就不多说,举例是为了方便理解为什么要用include,具体内容后续详细说。

include(cmake/ProjectConfig.cmake)
include(cmake/QtConfig.cmake)

根目录下往往设置这些内容后就可以放手给子目录了,例如代码目录中的cmakelists.txt,但是如果你的子目录中存在cmakelists.txt文件,不是默认会进行cmake构建的,需要用到下面命令

add_subdirectory(FileName)

该命令可以像树一样,去找到对应子目录下的cmakelists.txt文件进行相应的处理,多个文件夹,可以多次add_subdirectory;但是多层的文件夹,需要一层一层的add_subdirectory。

基本上到这里就差不多能构成一个根目录下的cmakelists.txt了,但是也可以在后续添加一些额外操作,如果有需要的话,例如可以运行一些其他地方定义的macro或者function,这样可以做一些需要的操作。
因为一般来说,cmake执行顺序是根据书写顺序来完成的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值