一. 简介
前面几篇文章学习了 CMakeLists.txt语法中 部分常用命令。
接下来学习CMakeLists.txt语法中部分常用变量,变量也是 cmake 中的一个重头戏,cmake 提供了很多内置变量。每一个变量都有它自己的含义,可以通过如下链接地址查询到所有的内置变量及其相应的介绍:
https://cmake.org/cmake/help/v3.16/manual/cmake-variables.7.html 
 在这一份文档中,对变量进行分类。变量分为:提供信息的变量、改变行为的变量、描述系统的变量、控制编译的变量等等。 
 
 
1. 提供信息的变量
 
  顾名思义,这种变量可以提供某种信息,既然如此,那么我们通常只需要读取变量即可,而不需要对变量进行修改: 
 
 
| 变量 | 说明 | 
|  
      PROJECT_SOURCE_DIR  
      | 工程顶层目录,也就是顶层 CMakeLists.txt 源码所在目录 | 
|  
      PROJECT_BINARY_DIR  
      |  
      工 程  
      BINARY_DIR  
      , 也 就 是 顶 层  
      CMakeLists.txt  
      源码的 BINARY_DIR  
      | 
|  
      CMAKE_SOURCE_DIR  
      | 与 PROJECT_SOURCE_DIR 等价 | 
|  
      CMAKE_BINARY_DIR 
      | 与 PROJECT_BINARY_DIR 等价 | 
|  
      CMAKE_CURRENT_SOURCE_DIR  
      | 当前源码所在路径 | 
|  
      CMAKE_CURRENT_BINARY_DIR  
      | 当前源码的 BINARY_DIR | 
|  
      CMAKE_MAJOR_VERSION  
      | cmake 的主版本号 | 
|  
      CMAKE_MINOR_VERSION  
      | cmake 的次版本号 | 
|  
      CMAKE_VERSION  
      | cmake 的版本号(主+次+修订) | 
|  
      PROJECT_VERSION_MAJOR  
      | 工程的主版本号 | 
|  
      PROJECT_VERSION_MINOR  
      | 工程的次版本号 | 
|  
      PROJECT_VERSION  
      | 工程的版本号 | 
|  
      CMAKE_PROJECT_NAME  
      | 工程的名字 | 
|  
      PROJECT_NAME  
      | 工程名,与 CMAKE_PROJECT_NAME 等价 | 
2. PROJECT_SOURCE_DIR变量 和 PROJECT_BINARY_DIR 变量
PROJECT_SOURCE_DIR 变量表示工程的顶级目录,也就是顶层 CMakeLists.txt 文件所在目录; 
  PROJECT_BINARY_DIR  
  变 量 表示 工程 的  
  BINARY_DIR  
  ,也 就是 顶 层  
  CMakeLists.txt  
  源 码 对 应的  
  BINARY_DIR 
  (输出文件目录)。  
 
 
  
  
  譬如工程目录结构如下所示: 
 
 
 
 
 
  CMakeLists.txt  
  文件内容如下:  
 
 
  
 # CMakeLists.txt
cmake_minimum_required("VERSION" "3.16")
project(HELLO)
message(${PROJECT_SOURCE_DIR})
message(${PROJECT_BINARY_DIR}) 
  CMakeLists.txt  
  中,我们打印了  
  PROJECT_SOURCE_DIR  
  和  
  PROJECT_BINARY_DIR  
  变量,进入到  
  build  
  目录下,执行  
  cmake 
  : 
 
 
  
 
 
 
  从打印信息可知, 
  PROJECT_SOURCE_DIR  
  指的就是工程的顶层  
  CMakeLists.txt  
  源码所在路径,而  
  PROJECT_BINARY_DIR  
  指的是我们执行  
  cmake  
  命令的所在目录。 
 
 
 3. CMAKE_SOURCE_DIR 和 CMAKE_BINARY_DIR
 
  与上面两个等价,大家自己打印出来看看便知!  
 
 
  向 
 顶层  
 CMakeLists.txt 添加打印命令: 
 
 
message(${CMAKE_SOURCE_DIR})
message(${CMAKE_BINARY_DIR})
  进入 build目录下,执行 cmake ..命令后如下: 
 
 
 
 
 
  可以看出,与 
 PROJECT_SOURCE_DIR,PROJECT_BINARY_DIR一样的目录。 
 
 
 



















