一、cmake简介
CMake是一个开源的构建工具,用于自动化构建过程。它不直接构建项目,而是生成适用于不同编译器和操作系统的构建脚本,如Makefile、Visual Studio项目文件等。这使得开发者能够轻松地在不同平台上构建他们的项目。
cmake优势:
-
跨平台性:CMake能够生成针对各种操作系统(如Linux、Windows、macOS)和编译器(如GCC、Visual Studio)的构建文件,确保项目在不同环境中具有良好的可移植性。
-
模块化:CMake支持模块化的项目配置,使得项目的构建规则能够被组织为独立的CMake模块,方便项目的管理和维护。
-
可扩展性:开发者可以编写自定义的CMake模块和宏来满足项目特定的需求,使CMake适用于各种项目类型。
-
自动依赖管理:CMake能够自动检测和管理项目的依赖关系,包括库文件和头文件,简化了构建配置的过程。
-
简化构建过程:通过CMake,开发者可以更轻松地配置构建选项、编译和安装项目
二、cmake安装及测试
1.安装
首先查看自己的虚拟机上是否有cmake 输入命令(cmake -version)
没有就下载安装 输入命令(sudo apt install cmake)
提示(Y/n)输入“y”就可以
下载成功后输入命令以查看安装是否成功 输入命令(cmake -version)
然后就是安装gcc和g++,先输入命令(g++ -version)查看版本,没有就执行命令(sudo apt install g++)进行安装,有Y选y,gcc同理
至此,准备工作完成
三、创建项目
1.创建一个新文件夹并在文件夹内打开终端,输入code . 来打开vscode
2.进入vscode后,直接按下快捷键 ctrl+shift+p,选择CMake:Quick Start
3.输入项目名称
4.选择用什么语言,博主学c就选c
5.选择创建可执行编译文件
6.这里根据需求,如果都不需要就都不勾选,直接点击确定即可
7.ctrl+c保存后,左上角会直接生成build文件夹
8.接下来在左边创建文件夹,至少要有bin,inc,lib,src这些文件夹
9.接下来在main.c这个文件里面按F5,点击默认配置
10.点击打开launch.json
11.点击右下角添加配置,并选择第一个(gdb启动)
12.在里面修改配置信息
修改为/build+项目名称就可以
13.到这里生成了一个json文件,我们还要生成第二个,点击CMakeLists.txt,输入快捷键ctrl+shift+b,然后点击“没有找到要运行....”
14.选择第一个,“使用模板.....”
15.选择others
16.然后进入到task.json,将里面的内容换成以下内容,直接ctrl+c/v
换成以下代码
// tasks.json文件配置
{
"version": "2.0.0",
"options": {
"cwd": "${workspaceFolder}/build"
},
"tasks": [
{
"type": "shell",
"label": "cmake",
"command": "cmake",
"args": [
".."
]
},
{
"label": "make",
"group": {
"kind": "build",
"isDefault": true
},
"command": "make",
"args": []
},
{
"label": "Build", //### launch.json中选择了这个
"dependsOrder": "sequence",
"dependsOn": [
"cmake",
"make"
]
}
]
}
17.接下来配置自己的项目,删除生成的main.c,在src里面重新创建一个main.c方便用来测试cmake项目是否创建好
main.c的测试代码:
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("HELLO WORLD!!!\n");
return 0;
}
删除刚一开始生成的main.c后,CmakeLists.txt,会报错,直接删除报错那一行就可以
18.最后配置CmakeLists.txt,在里面ctrl+c/v以下代码(主要是引入inc头文件,其他目录的头文件,要编译的文件等),下面的代码没有依赖库,有需求自己添加即可
#debug模式
SET(CMAKE_BUILD_TYPE Debug) #debug模式
#SET(CMAKE_BUILD_TYPE Release) #Release模式
#暂时不管,测试
include(CTest)
enable_testing()
# 2.需要的依赖库 现在没有
# 3.设置可执行文件与链接库保存的路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
# 4.设置头文件目录使得系统可以找到对应的头文件
include_directories(
${PROJECT_SOURCE_DIR}/inc #自己目录的头文件
${EIGEN3_INCLUDE_DIR} #其他系统目录的头文件 也可以直接写路径/usr/include/eigen3
${Pangolin_INCLUDE_DIRS}
)
# 5.编译动态库并链接库文件
# 6.生成可执行文件
#选择需要编译的源文件,有几个文件写几个
#add_executable(my src/main.c src/test.c)
# 扫描src目录下的所有C文件
aux_source_directory(src SRC_FILES)
add_executable(main ${SRC_FILES})
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
#配置cmake项目c语言的版本 99
set(CMAKE_C_STANDARD 99)
# 设置交叉编译器的位置
set(CMAKE_C_COMPILER gcc)
include(CPack)
注意,里面的这三行代码,29行等价于31,32,建议使用29行,更加直白一点
选择29行这个的话,其实就是将src文件下的main.c文件,编译成叫main的二进制文件,如图,左边bin目录下的main(编译之后才会出现)
19.编译测试(两种办法)
第一种:直接点击下面最右边的小三角
输出结果,测试成功
第二种在终端输入命令
cd ../ 返回上级目录
cd ./build 进入build文件夹,输入make,会提示main文件已经编译好了
接下来cd ../退出build目录,cd ./bin进入bin目录, 执行./main编译好的main文件,输出内容,即测试成功
安装完成!