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。vscodeCMake 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】:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值