CMake教程(一):cmake构建程序的基础配置

主要内容:本文主要介绍了使用 cmake 编译和构建 C++ 程序的基础配置。所谓基础配置是指一个 CMakeLists.txt 文件通常需要包含哪些基本的要素能够构建出一个 C++ 程序。

官网教程所用到的文件可以在官网链接下载。

大部分项目是从源代码构建而来的可执行文件。对于简单的项目,三行CMakeLists.txt文件就能够满足要求。这是教程的起点。在Step1目录中创建CMakeLists.txt文件,文件内容如下:

# 用于设置所允许的cmake最小版本号
cmake_mininum_required(VERSION 3.10)

# 设置项目的名字
project(Tutorial)

# 添加可执行文件
add_executable(Tutorial tutorial.cxx)

注意此 CMakeLists.txt 文件使用了小写形式的命令。cmake 支持大写、小写和大小写混合形式的命令。tutorial.cxx 是在Step1目录中的源代码文件,用于计算一个数的平方根。

所有需要做的就是构建和运行我们的项目。首先,运行cmake可执行命令或者cmake-gui来配置项目,然后用你所选择的构建工具构建项目。

例如,进入到cmake源代码树的所在目录Step1,然后创建一个目录:

# mkdir Step1_build

之后,进入到Step1_build目录(build目录),运行cmake来配置项目和生成原生的构建系统:

# cd Step1_build

# cmake ../Step1

然后调用构建系统来编译或链接这个项目:

# cmake —build ..

最后,执行以下 shell 命令使用刚构建的 Tutorial

./Tutorial 4294967296

在这里插入图片描述

指定c++标准

CMake 有一些特殊的变量用于构建项目代码。这些变量通常以 CMAKE_ 开头。 CMAKE_CXX_STANDARDCMAKE_CXX_STANDARD_REQUIRED这两个变量用于指定项目所使用的 C++ 标准。

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

添加版本号和配置头文件

有时候我们想要在源代码中访问 CMakelists.txt 文件中定义的变量。实现这个需求的一种方式就是使用配置的头文件。我们在这个输入文件中定义多个需要被替换的变量,这些变量的语法是 @VAR@。然后,使用 CMake 的 configure_file() 指令将输入拷贝到指定的输出文件,并且用 CMakelists.txt 文件中定义的变量 VAR 的真实值填充源代码文件中变量的值。简言之,就是用 CMakelists.txt 文件变量 VAR 的值去替换源代码文件中对应变量的值。
下面是完整的 CMakelists.txt 文件内容:

# TODO 1: Set the minimum required version of CMake to be 3.10
cmake_minimum_required(VERSION 3.10)
# TODO 2: Create a project named Tutorial
project(Tutorial VERSION 1.0)
# TODO 7: Set the project version number as 1.0 in the above project command

# TODO 6: Set the variable CMAKE_CXX_STANDARD to 11
#         and the variable CMAKE_CXX_STANDARD_REQUIRED to True
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# TODO 8: Use configure_file to configure and copy TutorialConfig.h.in to
#         TutorialConfig.h
configure_file(TutorialConfig.h.in TutorialConfig.h)
# TODO 3: Add an executable called Tutorial to the project
# Hint: Be sure to specify the source file as tutorial.cxx
add_executable(Tutorial tutorial.cxx)
# TODO 9: Use target_include_directories to include ${PROJECT_BINARY_DIR}
target_include_directories(Tutorial PUBLIC
                            "${PROJECT_BINARY_DIR}")

tutorial.cxx 文件当中的内容:

// A simple program that computes the square root of a number
#include <cmath>
// #include <cstdlib> // TODO 5: Remove this line
#include <iostream>
#include <string>

// TODO 11: Include TutorialConfig.h
#include <TutorialConfig.h>

int main(int argc, char* argv[])
{
  if (argc < 2) {
    // TODO 12: Create a print statement using Tutorial_VERSION_MAJOR
    //          and Tutorial_VERSION_MINOR
    std::cout << argv[0] << " Version " << Tutorial_VERSION_MAJOR << "."
              << Tutorial_VERSION_MINOR << std::endl;
    std::cout << "Usage: " << argv[0] << " number" << std::endl;
    return 1;
  }

  // convert input to double
  // TODO 4: Replace atof(argv[1]) with std::stod(argv[1])
  const double inputValue = std::stod(argv[1]);

  // calculate square root
  const double outputValue = sqrt(inputValue);
  std::cout << "The square root of " << inputValue << " is " << outputValue
            << std::endl;
  return 0;
}

TutorialConfig.h.in 文件当中的内容:

// the configured options and settings for Tutorial
// TODO 10: Define Tutorial_VERSION_MAJOR and Tutorial_VERSION_MINOR
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@

需要注意的是,在我们使用 cmake 命令构建项目之前,在用编辑器编辑源文件 tutorial.cxx 时,会提示 TutorialConfig.h 头文件找不到。这时,需要清理 build 目录下的所有文件,然后在终端重新执行 cmake ..make 命令。

测试程序的用法:
在这里插入图片描述

各位道友,码字不易,点个赞再走呗。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值