002.CMakeLists.txt文件初步


所有的CMake项目都以一个名为CMakeLists.txt的文件开始,它应该放在源代码树的顶部。它定义了从源代码和目标到测试、打包和其他定制任务的所有构建内容。这种定义的能力,来自于CMake自己的语言。CMake语言有许多程序员熟悉的东西,比如变量、函数、宏、条件逻辑、循环、代码注释等等。这些概念和特性将在接下来的文章中介绍。

下面内容是一个简单的CMakeLists.txt文件,只包含三行,用以生成一个基本的可执行文件。

cmake_minimum_required(VERSION 3.12)
project(hello)
add_executable(hello main.cpp)

这里牵扯到CMake的第二个概念,命令。(前面说到,第一个概念是目录)

每一行都叫做CMake命令,类似于其他语言的函数调用,可以使用参数,但是不会直接返回值(有相应的技巧可以实现返回值,牵扯到变量作用域的相关概念,后面介绍)。

需要注意的是,CMake命令是不区分大小写的,所以add_executable和ADD_EXECUTABLE是一样的效果。

慎重选择CMake版本

CMake处在不断地开发进化之中,新版本可能支持更多的特性,新的工具,以及新的平台。其后向兼容性非常好,以至于新版本的软件几乎总是可以处理旧版本的CMakeLists.txt文件。但旧版本软件往往不能处理新特性,所以需要明确告知CMake应该表现的至少像哪个版本一样。

cmake_minimum_required(VERSION major.minor[.patch[.tweak]])

选择版本非常重要,以至于cmake_minimum_required()需要放在所有其他命令之前。cmake_minimum_required()命令告诉CMake项目要求的最低版本,并强制设置CMake的某些行为与指定的版本相匹配。事实上,使用cmake_policy()可以提供更精细的控制,后文再说。

需要注意的是,3.2版是提供现代CMake完整特性的最古老版本,当然越新的版本支持的特性越完善。

Project()命令

每一个项目都需要一个Project命令,且它出现在cmake_minimum_required()命令之后。其命令格式为:

project(projectName
	[VERSION major[.minor[.patch[.tweak]]]]
	[LANGUAGES languageName ...]
)

projectName是必须提供的,在很多地方可以用到,比如VS等IDE的解决方案名字,或者作为元信息打包使用等。

VERSION可选,且CMake3.0之后的版本才支持。定义工程的版本是个好习惯,但也没啥大用处。

LANGUAGES可选,支持C,CXX,Java,Fortran,ASM等。也可以设为NONE,此时CMake将不会配置编译器等信息,在某些情况下可能会有用,比如一个Latex项目的管理,基本用不到上述语言的相关信息。默认是C和CXX。

add_executable命令

add_executable() 告诉CMake生成一个可执行文件类型的目标。当然,CMake支持的目标有很多种,后文详述。命令的格式为:

add_executable(targetName [WIN32] [MACOSX_BUNDLE]
	[EXCLUDE_FROM_ALL]
	source1 [source2 ...]
)

大多都是可选项目,后面说CMake目标类型的时候,在详细介绍。

总结

到此为止,一个简单的CMake项目配置完成。前文所示的HelloWorld例子中,CMakeLists.txt文件内容如下:

cmake_minimum_required(VERSION 3.2)
project(HelloWorld)
add_executable(hello main.cpp)

main.cpp文件内容如下:

#include <iostream>

int main(int argc, char** argv){
    std::cout << "Hello World" << std::endl;
    return 0;
}

有兴趣的可以回去对照着倒腾一遍,也挺有意思。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温铜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值