CMake 笔记 | [1] 单个源文件编译为可执行文件
一、项目结构
|
|
本项目只包含了一个源文件hello_world.cpp和一个CMake文件。
源码地址: https://github.com/jianye0428/CMake_Learning_Notes/tree/main/Note_1/hello-world
二、CPP源文件
|
|
三、CMake文件
|
|
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
设置CMake所需的最低版本的最低版本,如果使用的CMake版本低于该版本,则会发出致命错误。 今后,笔记中CMake的版本要求都为3.10。vscode中CMake Tool插件使用debug功能要求CMake版本不低于3.10。如果使用的系统ubuntu 16.04的话,需要升级CMake版本,windows请自行安装高于3.10版本的CMake。
project(hello-world LANGUAGES CXX)
声明了项目的名称和支持的编程语言,且该命令必须生命在cmake_minimum_required之后。一旦声明了项目的名称后,可以使用宏定义${PROJECT_NAME}进行调用。 在CMake中,C++是默认的编程语言。不过在实际编写代码过程中,仍建议使用LANGUAGES选项在project命令中显示地声明项目的语言。
add_executable(${PROJECT_NAME} hello_world.cpp}
CMake创建一个新可执行文件,其名字为${PROJECT_NAME}(也可以使用其他任意的名字)。这个可执行文件是通过编译和链接源文件hello_world.cpp生成的。
CMake将为编译器使用默认设置,并自动生成工具。
四、操作
在工程文件夹下,执行如下操作:
|
|
输出结果:
|
|
CMake的构建方式有两种: 源内构建和源外构建。源内构建即在CMakeLists.txt同级目录中进行构建,构建出来的CMake文件将在该目录中,这通常是不推荐的,因为这会混合源代码和项目的目录树。源外构建的构建方式,就是笔记的构建方式,往后我们都采用源外构建的方式。
CMake是一个构建系统生成器。将描述构建系统,如Unix Makefile、Ninja、sln等应当如何操作才能编译代码。然后,CMake为所选的构建系统生成相应的指令。默认情况下,在GNU/Linux和macOS系统上,CMake使用Unix Makefile生成器。Windows上,sln是默认的生成器。
GNU/Linux上,CMake默认生成 Makefile来构建项目:
- Makefile: make将运行指令来构建项目。
- CMakefile: 包含临时文件的目录,CMake用于检测操作系统、编译器等。此外,根据所选的生成器,它还包含特定的文件。
- cmake_install.cmake: 处理安装规则的CMake脚本,在项目安装时使用(命令为执行为make后执行make install)。
- CMakeCache.txt: 如文件名所示,CMake缓存。CMake在重新运行配置时使用这个文件。