CMake构建项目——一个简单实例
1 cmake简介
cmake是一个跨平台的构建工具,它可以根据不同的平台生成不同的构建脚本,如Makefile、Visual Studio项目文件等。cmake可以自动生成项目文件,不需要手动编写项目文件,提高了开发效率。
2 CMakeLists.txt文件
CMakeLists.txt文件是CMake的配置文件,它定义了项目的名称、版本、依赖库、编译选项等信息。CMakeLists.txt文件的内容就是CMake的命令,这些命令告诉CMake如何构建项目。下面通过一个例子来介绍CMakeLists.txt文件的编写:
3 CMakeLists.txt文件编写实例
这是一个冒泡排序项目,包含一个主程序源文件和一个函数源文件,项目文件结构树如下:
sort
├── CMakeLists.txt
├── include
│ └── bubbleSort.h
├── src
| ├── main.cpp
| └── bubbleSort.cpp
├── build
对应的CMakeLists.txt文件内容如下:
project(sort)
cmake_minimum_required(VERSION 3.10)
set (CMAKE_CXX_STANDARD 11)
INCLUDE_DIRECTORIES(include)
AUX_SOURCE_DIRECTORY(src SRC)
FILE(GLOB_RECURSE HEAD include/*.h)
source_group(SOURCE\ FILES FILES ${SRC})
source_group(HEADER\ FILES FILES ${HEAD})
ADD_EXECUTABLE(sort ${SRC} ${HEAD})
- 首先
project(sort)
创建了一个名为sort的项目; cmake_minimum_required(VERSION 3.10)
指定了CMake的最低版本;- 然后
set (CMAKE_CXX_STANDARD 11)
指定了C++的标准为11; INCLUDE_DIRECTORIES(include)
指定了头文件的路径。它将include目录添加到包含路径中,使编译器能够找到项目中的头文件;AUX_SOURCE_DIRECTORY(src SRC)
指定了源文件的路径。它收集src目录下的所有源文件,并将它们存储在变量SRC中;FILE(GLOB_RECURSE HEAD include/*.h)
这里面的GLOB_RECURSE表示递归查找,include/*.h表示在include目录下查找所有以.h结尾的文件,并将它们存储在变量HEAD中;source_group(SOURCE\ FILES FILES ${SRC})
和source_group(HEADER\ FILES FILES ${HEAD})
是将源文件和头文件分别放在不同的文件夹中,方便查看。- 最后
ADD_EXECUTABLE(sort ${SRC} ${HEAD})
使用收集到的源文件和头文件创建一个名为 sort 的可执行文件。
4 编译运行
接下来就可以在build文件夹下使用cmake ..
构建项目了。然后使用make
编译项目。编译完成后,会在build文件夹下生成可执行文件sort,输入./sort
就可以直接运行。