最基本的从源代码构建可执行文件的项目只需要三行的CMakeLists.txt
文件。例如下面构建一个名为Hello的工程。
//设定所支持的CMake最小版本
cmake_minimum_required(VERSION 3.10)
//设定项目名字
project(Hello)
//添加可执行文件构建目标(代码文件)
add_executable(Hello Hello.cpp)
工程实例目录结构如下:
.
├── CMakeLists.txt
└── Hello.cpp
Hello.cpp文件内容如下,执行结果为打印Hello World!
#include <iostream>
int main()
{
std::cout <<"Hello world!" << std::endl;
return 0;
}
一般不在CMakeLists.txt同级目录构建项目,否则在根目录生成很多CMake的中间文件会比较混乱。创建一个构建目录叫build
。
.
├── CMakeLists.txt
├── Hello.cpp
└── build
进入构建目录并通过cmake命令生成makefile,然后用make
命令或者cmake --build .
命令进行编译。cmake
命令参数为CMakeLists.txt
所在目录,本例中配置文件在上一级。
> cmake ..
执行完cmake命令后,会看到在build目录生成很多中间文件,也包括build目录下的makefile
.
├── CMakeLists.txt
├── Hello.cpp
└── build
├── CMakeCache.txt
├── CMakeFiles
├── Makefile
└── cmake_install.cmake
makefile才是接下来编译的关键,直接在build目录执行make
或者cmake --build .
命令进行编译
> make
这时再看看build目录,会发现编译出来了一个可执行文件Hello
.
├── CMakeLists.txt
├── Hello.cpp
└── build
├── CMakeCache.txt
├── CMakeFiles
├── Hello
├── Makefile
└── cmake_install.cmake
接下来执行可执行文件Hello
> ./Hello
Hello world!
本文中目录结构的打印用了tree命令。有需求可以通过 brew install tree
进行安装,通过tree -L 2
命令打印,-L 后面要打印的目录层级。
网友评论