一个简单的开始

最简单的项目构建是从源代码文件构建一个可执行文件。而对于简单的项目,cmake 只需要两行的 CMakeLists.txt 文件即可。如下所示:

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

注意,这个示例在中的命令使用的是小写字母。实际上 CMake 中的命令是支持大写、小写和混合大小写的。下方 tutorial.cxx 的代码将计算一个数字的平方根,并且它的第一个版本非常简单:

//一个计算数字平方根的简单程序
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

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;
}

添加版本号和配置的头文件

我们将添加的第一个功能是为可执行文件和项目提供一个版本号。虽然您可以在源代码中完全执行此操作,但在 CMakeLists.txt 文件中执行此操作可提供更大的灵活性。要添加版本号,我们修改 CMakeLists.txt 文件,如下所示:

cmake_minimum_required (VERSION 2.6)
project (Tutorial)
# 版本号。
set (Tutorial_VERSION_MAJOR 1)
set (Tutorial_VERSION_MINOR 0)

# 配置一个头文件来传递一些CMake设置到源代码
configure_file (
  "${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"
  "${PROJECT_BINARY_DIR}/TutorialConfig.h"
  )

# 将二叉树添加到包含文件的搜索路径以便我们找到 TutorialConfig.h
include_directories("${PROJECT_BINARY_DIR}")

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

由于配置的文件将被写入二叉树,我们必须将该目录添加到要搜索包含文件的路径列表中。然后,我们使用以下内容在项目中创建一个 TutorialConfig.h.in 文件:

// C/C++ 中通过 Cmake 的变量定义配置、版本号
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@

当CMake配置这个头文件时,@Tutorial_VERSION_MAJOR@@Tutorial_VERSION_MINOR@ 的值将被 CMakeLists.txt 文件中的值替换。接下来,我们修改 tutorial.cxx 以包含配置的头文件并使用版本号。产生的源代码如下所示。

//一个计算数字平方根的简单程序
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "TutorialConfig.h"

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 头文件,并在版本信息中打印出版本号。

当前代码

Github Example 地址

results matching ""

    No results matching ""