一、安装cmake
二、cmake的编译执行过程
//一、在cpp文件所在的路径下创建CMakeLists.txt
vim CMakeLists.txt
//二、 在CMakeLists.txt文件里写入代码
//三、生成Makefile文件。 点表示当前目录,在当前目录生成Makefile文件
cmake .
//四、编译
make
//五、运行可执行文件
./可执行文件
三、CMake一个HelloWord的语法介绍
PROJECT(HELLO)
SET(SRC_LIST main.cpp)
MESSAGE(STATUS "This is BINARY dir" ${PROJECT_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir" ${PROJECT_SOURCE_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})
cmake_minimum_required 指定CMake的最小版本要求
cmake_minimum_required(VERSION 2.8.3)
PROJECT关键字
可以用来指定工程的名字和支持的语言,默认支持所有语言
PROJECT(HELLO)制定了工程的名字,并且支持所有语言(建议使用)
PROJECT(HELLO CXX)制定了工程的名字,并且支持所有语言是C++
PROJECT(HELLO C CXX)制定了工程的名字,并且支持所有语言是C和C++
该指定隐式定义了两个CMAKE的变量
<projectname>_BINARY_DIR,本PROJECT_BINARY_DIR
<projectname>_SOURCE_DIR,本例中是PROJECT_SOURCE_DIR
SET关键字
用来显示的指定变量的
SET(SRC_LIST main.cpp) SRC_LIST变量就包含了main.cpp
也可以SET(SRC_LIST main.cpp t1.cpp t2.cpp)
include_directories 向工程添加多个特定的头文件搜索路径 相当于指定g++编译器的-l参数
#将/usr/lib/myincludefolder 和 ./include添加到头文件搜索路径
include_directories(/usr/include/myincludefolder ./include)
link_directories 向工程添加多个特定的库文件搜索路径 相当于指定g++编译器的-L参数
#将/usr/lib/mylibfolder 和./lib 添加到库文件搜索路径
link_directories(/usr/lib/mylibfolder ./lib)
add_library 生成库文件
#通过变量SRC生成libhello.so 共享库
add_library(hello SHARED ${SRC})
MESSAGE关键字
向终端输出用户自定义的信息
主要包含三种信息:
SEND_ERROR,产生错误,生成过程被跳过。
SATUS,输出前缀为-的信息。
FATAL_ERROR,立即终止所有cmake过程。
ADD_EXECUTABLE关键字
生成可执行文件
ADD_EXECUTABLE(hello ${SRC_LIST}) 生成的可执行文件名是hello,源文件读取变量SRC_LIST中的内容也可以直接写ADD_EXECUTABLE(hello main.cpp)
可以不写SET和MESSAGE
简写(工程名和生成的可执行文件hello是没有任何关系的)
PROJECT(HELLO)
ADD_EXECUTABLE(hello main.cpp)
四、外部构建
上面的方法就属于内部构建,会产生很多临时文件,不方便清理
可以使用外部构建的方法,会把生成的临时文件放在build目录下,不会对源文件产生什么影响
//创建build文件夹
mkdir build/
//进入文件夹
cd build
//在build文件夹中生成Makefile
CMake ..
//生成可执行文件
make
当多文件时候这么编译
cmake_minimum_required(VERSION 3.0)
project(SWAP)
include_directories(include)
add_executable(main_cmake main.cpp src/swap.cpp)
五、使用VSCode进行完整项目开发
1、合理设置项目目录
2、编写项目源文件
3、编写CMakeLists.txt构建项目编译规则
4、使用外部构建,手动编译CMake项目
5、配置VSCode的json文件调试项目