CMake:Tutorial-Step1

Step1: A basic Starting Point(基本初步)

0最简单的CMakeLists.txt

在文件夹下编译单个文件,要编译的是tutorial.cxx这个文件。

其中CMakeLists.txt 文件内容如下:

cmake_minimum_required(VERSION 3.10)

#set the project name and version
project(Tutorial)

#add the executable
add_executable(Tutorial tutorial.cxx)

在命令行输入

cmake .

在当前文件夹下编译得到Makefile 和一大堆中间文件。

再编译一下

make

该路径下会多了一个Tutorial的可执行文件。

1添加版本号以及配置头文件

使用project()命令给定版本号

  3 #set the project name and version
  4 project(Tutorial VERSION 1.0)

配置头文件并把版本号传给源码:

configure_file(TutorialConfig.h.in TutorialConfig.h)

配置的文件会被写入二叉树,需要把当前路径

  9 #add the include directories 
 10 target_include_directories(Tutorial PUBLIC "$(PROJECT_BINARY_DIR)")

target_include_directories()用于编译给定target的时候指定include头文件目录。这个target是先要通过 add_executable()或者add_library()先生成的。而且这个target不能是ALIAS target(不能是别名),通过使用AFTER|BEFORE 可以选择附加还是预附加。INTERFACE|PUBLIC|PRIVATE 是为了给定target属性,后面的items就是头文件目录了。

target_include_directories( [SYSTEM] [AFTER|BEFORE]
   [items1...]
  [ [items2...] ...])

在这里说明一下PROJECT_BINARY_DIRPROJECT_SOURCE_DIR 这俩变量的区别,如果如上面那个简单的case,源码和CMakeLists.txt 都在一个层级且在这个目录执行cmake ./或者cmake .。那生成makefile的和当前源码所在的目录都是当前目录,也就是这种时候以上俩变量一样。如果把源码和CMakeLists.txt放在子目录./src,并在主目录的子目录的./build目录下使用cmakecmake ../src,则cmake生成的makefile和一大堆中间文件都在build文件夹下,PROJCET_BINARY_DIR=./build;PROJECT_SOURCE_DIR =./src

编写文件TutorialConfig.h.in:

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

2 确定C++标准

在CMakeLists.txt 中添加如下字段来确定C++ 标准

# specify the C++ standard
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

由于确定了是c++11标准,需要修改源码文件:删除包含#include,把atof()替换成 stod()。(把字符转换成double)

3 编译并测试

mkdir Step1_build
cd Step1_build
cmake ../Step1  # 配置cmake [包含源码和CMakeLists.txt的路径]
cmake --build . # 编译

这里我自己出了俩小bug

其中一个是

16 #add the include directories 
 17 target_include_directories(
 18     Tutorial PUBLIC "${PROJECT_BINARY_DIR}" #之前错误使用 $(PROJECT_BINARY_DIR)
 19     )

且在源代码中未include头文件导致出现bug:
CMake:Tutorial-Step1_第1张图片

修改俩bug就可了。

最后执行的时候

./Tutorial 9

你可能感兴趣的:(cmake,C++,c++,cmake)