CMake Tutorial (1)——A Basic Starting Point

最基础的程序项目是通过对源码文件的构建产生可执行文件。对于简单的工程,你只需要在CMakeLists.txt文件中写入几行文本就足够了。这将是学习CMake的起点,CMakeLists.txt的文件内容与下面类似:

cmake_minimum_required (VERSION 2.6)
project (Tutorial)
add_executable (Tutorial tutorial.cxx)

在上面的示例文件CMakeLists.txt中,使用的都是小写的英文字母。当然你也可以采用大写,或则大小写混合使用,CMake工具都是支持的。tutorial.cxx源文件的第一个版本如下,它会计算所给数值的平方根:

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
using namespace std;

int main(int argc, char *argv[])
{
    if (argc < 2) {
        fprintf(stdout, "usage: %s number\n", argv[0]);
        return 1;
    }
    double inputValue = atof(argv[1]);
    double outputValue = sqrt(inputValue);
    fprintf(stdout, "The square root of %g is %g\n",
            inputValue, outputValue
    );
    return 0;
}

添加版本号并配置头文件
现在我们为我们的工程和程序添加一个版本号(Version number)。当然你也可以选择在源代码中这么做,但是将其定义在CMakeLists.txt中会更加灵活,特别是当项目越来越大时。现在为了添加版本号,我们将CMakeLists.txt文件修改成下面这样:

# Minimum version required
cmake_minimum_required(VERSION 3.0.0)

PROJECT(Tutorial)

# The version number
set (Tutorial_VERSION_MAJOR 1)
set (Tutorial_VERSION_MINOR 0)

# configure a header file to pass some of the Cmake settings
# to the source code

configure_file(
    "${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"
    "${PROJECT_BINARY_DIR}/TutorialConfig.h"
)

# add the binary tree to the search path for include file
# so that we will find TestConfig.h
include_directories("${PROJECT_BINARY_DIR}")

# add the executable
ADD_EXECUTABLE(tutorial tutorial.cpp)

先解释一下上面的两个东西,“PROJECT_SOURCE_DIR和PROJECT_BINARY_DIR”,你可以把它们看做是两个常量量,它们是CMake系统内部已经定义好的。前者指代的是你的源码目录,后者指的是你的构建文件所在的目录,网上有部分人认为它们没有区别,其实是有的,主要看你的习惯。一般在使用CMake时,我们会新建一个名为build的文件夹,看起来像这样。

drwxrwxr-x 3 black black 4.0K 318 13:23 build
-rw-rw-r-- 1 black black  539 318 13:10 CMakeLists.txt
-rw-rw-r-- 1 black black  149 318 11:58 TestConfig.h.in
-rw-rw-r-- 1 black black  602 318 12:03 test.cpp

build为PROJECT_BINARY_DIR,而test.cpp文件所在的目录为PROJECT_SOURCE_DIR。但是你如果直接在test.cpp所在目录使用CMake命令进行初始化,那么上面的两个常量量指的就是同一个目录了。

现在再来看上面的CMakeLists.txt文件,我们先用set定义了两个常量,然后再添加configure_file(配置文件的命令),接着你需要将TutorialConfig.h文件的位置告诉CMake,也就是通过include_directories将所需目录包含。然后我们需要创建一个TutorialConfig.h文件(保存在source tree中,也就是和源码在同一目录),文件内容如下:

// the configured options and settings for Tutorial
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@

完成后,当CMake工具配置.in文件中@Tutorial_VERSION_MAJOR@和@Tutorial_VERSION_MINOR@的值时,会用在CMakeLists.txt文件中的值(Tutorial_VERSION_MAJOR即1和Tutorial_VERSION_MINOR即0)将它们两个替代,并在PROJECT_BINARY_DIR中生成一个TutorialConfig.h文件。接下来我们修改tutorial.cxx文件,让其包含配置头文件并使用version_number。修改后如下:

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include "TutorialConfig.h"
using namespace std;

int main(int argc, char *argv[])
{
    if (argc < 2) {
        fprintf(stdout, "%s Version %d.%d\n",
                argv[0],
                Tutorial_VERSION_MAJOR,
                Tutorial_VERSION_MINOR
        );
        fprintf(stdout, "usage: %s number\n", argv[0]);
        return 1;
    }
    double inputValue = atof(argv[1]);
    double outputValue = sqrt(inputValue);
    fprintf(stdout, "The square root of %g is %g\n",
            inputValue, outputValue
    );
    return 0;
}

文件包含了TutorialConfig.h文件,并将version number作为使用消息输出。输出如下:

./Tutorial Version 1.0
usage: ./Tutorial number
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值