CMake:单个源文件编译为可执行文件
导言:
前段时间,我们开启过一段短暂的cmake学习之旅,其主要是以翻译《PROFESSIONAL CMAKE: A PRACTICAL GUID》一书为主,并对其中部分内容加以改善。但是该书的内容比较生涩难懂,且其与C++相结合的例子却少之又少,所以停止了更新。
本次cmake学习之旅将结合《CMake Cookbook》一书以及在本人在具体项目工程需求的具体实践,将Modern CMake所有性能以代码和笔记的形式呈现!
本系列笔记之旅,首先假设你已对linux操作系统有了简单的了解,并对命令行有基本的了解。
本系列学习笔记争取一周更新一节内容,更新内容较少,主要是为了将知识点细化,结合自己的实践一起对比讲解。(如果有后面的知识,我会在笔记中加以标记)
一、单个源文件生成可执行文件
1. 项目结构
.
├── CMakeLists.txt
└── hello_world.cpp
0 directories, 2 files
本项目只包含了一个源文件hello_world.cpp和一个CMake文件。
源码地址:https://gitee.com/jiangli01/tutorials/tree/master/cmake-tutorial/chapter1/01
注意:CMake
文件的名字只能是CMakeLists.txt
,当然如果使用include
命令(后续会讲到),可以以任何名字进行命名,只要以.cmake
结尾即可。
2. CPP文件
#include <cstdlib>
#include <iostream>
#include <string>
std::string SayHello();
int main() {
std::cout << SayHello() << std::endl;
return 0;
}
std::string SayHello() { return std::string("Hello, CMake World!"); }
3. CMake文件
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
project(hello-world LANGUAGES CXX)
add_executable(
${PROJECT_NAME}
hello_world.cpp
}
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
将为编译器使用默认设置,并自动生成工具。
4. 操作
mkdir build
cd build
cmake ..
-- The CXX compiler identification is GNU 9.4.0
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jiangli/repo/tutorials/cmake-tutorial/chapter1/01/build
CMake的构建方式有两种:源内构建和源外构建。源内构建即在CMakeLists.txt同级目录中进行构建,构建出来的CMake文件将在该目录中,这通常是不推荐的,因为这回混合源代码和项目的目录树。源外构建的构建方式,就是笔记的构建方式,往后我们都采用源外构建的方式。
CMake是一个构建系统生成器。将描述构建系统,如Unix Makefile、Ninja、sln等应当如何操作才能编译代码。然后,CMake为所选的构建系统生成相应的指令。默认情况下,在GNU/Linux和macOS系统上,CMake使用Unix Makefile生成器。Windows上,sln是默认的生成器。
GNU/Linux上,CMake默认生成 Makefile来构建项目:
1、Makefile: make将运行指令来构建项目。
2、CMakefile:包含临时文件的目录,CMake用于检测操作系统、编译器等。此外,根据所选的生成器,它还包含特定的文件。
3、cmake_install.cmake:处理安装规则的CMake脚本,在项目安装时使用(命令为执行为make后执行make install)。
4、CMakeCache.txt:如文件名所示,CMake缓存。CMake在重新运行配置时使用这个文件。
更多请关注微信公众号【Hope Hut】: