从零开始 CMake 学习笔记 (B)hello-headers
开始前先默念三遍口诀:
- Declare a target
- Declare target’s traits
- It’s all about targets
本系列主要根据GitHub上的 cmake-examples 项目进行翻译总结,同时对于不清晰的概念及函数进行查阅理解记录形成。
文章目录
1 介绍
本案例展示了hello world 示例,该示例使用了不同的文件夹来作为 源文件 和 包含文件。整体的文件结构如下:
1.1 文件树B-hello-headers$ tree
B-hello-headers$ tree
.
├── CMakeLists.txt
├── include
└── Hello.h
└── src
└── Hello.cpp
└── main.cpp
1.2 文件简介
- CMakeLists.txt - 包含了你希望运行的 CMake 命令;
// 设置CMake运行时的最低版本
// $ cmake --version
cmake_minimum_required(VERSION 3.5)
// 设置工程名
project (hello_headers)
// 创建一个source变量链接到所有需要编译的的.cpp源文件
set(SOURCES
src/Hello.cpp
src/main.cpp
)
// 添加可执行文件
add_executable(hello_headers ${
SOURCES})
// 设置可执行文件的需要包含的库的路径
// 相当于在运行 g++ 命令时通过下面命令指定 include 文件 : -I /directory/path/
target_include_directories(hello_headers
PRIVATE
${
PROJECT_SOURCE_DIR}/include
)
- include/Hello.h - 需要包含的头文件
#ifndef __HELLO_H__
#define __HELLO_H__
//创建 Hello 类,声明其 print() 方法
class Hello
{
public:
void print();
};
#endif
- src/Hello.cpp - 要编译的源文件
#include <iostream>
#include "Hello.h"
//类外重写 print() 方法
void Hello::print()
{
std::cout << "Hello Headers!" << std::endl;
}
- src/main.cpp - main文件
#include "Hello.h"
int main(int argc, char *argv[])
{
Hello hi;
hi.print();
return 0;
}
2 概念解析
2.1 路径变量
CMake 语法指定了许多变量,这些变量可用于帮助在项目或源代码树中找到有用的目录。其中一些路径变量包括:
Variable | Info |
---|---|
CMAKE_SOURCE_DIR | 工程的根目录 |
CMAKE_CURRENT_SOURCE_DIR | 当前源目录,如果使用子项目和目录时 |
PROJECT_SOURCE_DIR | 当前 cmake 项 |