从零开始 CMake 学习笔记 (A)hello-cmake
最近基于Caffe2 C++项目开发算子时,接触到了C++,查找的资料基本又杂又多,官方文档又缺少自己动手的小实验,因此有必要跟着 github 上的案例学习学习,顺带记录下自己的学习笔记留待后用。
定义:
CMake 可以编译源代码、制作程序库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake 支持 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake 也支持静态与动态程式库的建构。
“CMake”这个名字是“cross platform make”的缩写。虽然名字中含有“make”,但是CMake和Unix上常见的“make”系统是分开的,而且更为高阶。
开始前先默念三遍口诀:
- Declare a target
- Declare target’s traits
- It’s all about targets
本系列主要根据GitHub上的 cmake-examples 项目进行翻译总结,同时对于不清晰的概念及函数进行查阅理解记录形成。
文章目录
1 介绍
本案例展示了一个非常基本的hello world示例,整体的文件结构如下.
1.1 文件树
A hello-cmake$ tree
├── CMakeLists.txt
├── main.cpp
1.2 文件简介
- CMakeLists.txt - 包含了你希望运行的 CMake 命令;
# 设置CMake运行时的最低版本
# $ cmake --version
cmake_minimum_required(VERSION 3.5)
# 设置工程名
project (hello_cmake)
# 添加可执行文件
add_executable(hello_cmake main.cpp)
- main.cpp - "Hello World"的cpp文件。
#include <iostream>
int main(int argc, char *argv[])
{
std::cout << "Hello CMake!" << std::endl;
return 0;
}
2 概念解析
2.1 CMakeList.txt
CMakeLists.txt 时存储所有 CMake 命令的文件。当运行 cmake 命令时,他会查找路径下的 CMakeLists.txt 文件,并按照其中的命令执行。若不存在此文件,那么 cmake 命令将会退出并报错
2.1.1 最小 CMake Version
当使用 CMake 创建项目的时候,可以用下面的命令来指定支持