在vscode中配置使用cmake编译c++
cmake简介
最常规的编译cpp文件就是通过g++ ,编译执行一个cpp文件可以简单通过
g++ main.cpp && ./a.out
但是当项目越来越大,编写的cpp文件越来越多,需要使用库等需求越来越多时,
用g++就显得没有那么方便,所以便引出了cmake
简单来讲,我们需要编写一个CMakeLists.txt来制定编译规则
然后cmake通过CMakeLists.txt指定的规则编译生成Makefile
然后我们通过make就可以生成可执行文件
假设CMakeLists.txt与main.cpp在同个目录下
事实上我们也一般会放在同个目录下
可以通过如下命令生成可执行文件
cmake . && make
这里cmake命令后面跟了一个点,表示CMakeLists.txt在当前路径
但是因为它会产生很多编译中间文件,我们是不需要使用到的
而我们也不希望这些文件把我们的文件夹搞得很乱
所以我们常常会新建一个build文件夹
然后让编译产生的中间文件以及可执行文件都放在里面
mkdir build && cd build
cmake .. && make
这里cmake命令后面跟了两个点,表示上一级路径
因为我们已经切换到build路径了
CMakeLists.txt相当于在build的上一个路径
使用cmake重点还是编写CMakeLists.txt
注意这个文件名大小写和字母一个都不能错
以使用opencv库为例介绍一下如何编写
具体还需要根据自己项目编写适合的
cmake_minimum_required(VERSION 2.8) # 版本
project(hello_opencv) # 项目名
set(CMAKE_CXX_STANDARD 11) #指定标准 当初没有指定C++11 使用标准库中的一些函数 编译不通过
set(CMAKE_BUILD_TYPE "Debug")# 设置build模式 有Debug和Release
# 使用opencv
find_package( OpenCV REQUIRED ) # 寻找OpenCV包 REQUIRED表示找不到就停止cmake
include_directories(${OpenCV_INCLUDE_DIRS}) # 添加头文件目录
add_executable(${PROJECT_NAME} # ${PROJECT_NAME} 表示项目名称
main.cpp
) # 指定编译生成的可执行文件的名称 以及源文件
target_link_libraries(${PROJECT_NAME}
${OpenCV_LIBS}
) # 指定可执行文件的名称 以及库 自定义库也可以通过add_libary设置
常常我们也可以set一个变量如THIRD_PARTY_LIBRARY,然后通过${THIRD_PARTY_LIBRARY}引用
由于只需要生成一个可执行文件
上面我把项目名称的名字作为可执行文件的名字
要生成多个可执行文件就分别指定
在vscode里使用cmake
vscode是我最喜欢的编辑器,下面介绍一下如何在vscode里用cmake编译cpp文件
下载拓展
在vscode拓展商店下载c++、cmake拓展
创建项目文件夹
vscode是以一个文件夹来进行管理的
创建一个文件夹,作为你的项目文件夹
将其拖入vscode
配置c_cpp_properties.json
ctrl+shift+p 输入C/C++ 选择配置编辑json 将生成默认c_cpp_properties.json文件
修改编译器路径为g++ 修改c和c++的版本 添加Cmaketools拓展配置信息
修改后文件内容如下
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
],
"defines": [],
"compilerPath": "/usr/bin/g++",
"cStandard": "c11",
"cppStandard": "c++98",
"intelliSenseMode": "gcc-x64",
"configurationProvider": "ms-vscode.cmake-tools"
}
],
"version": 4
}
配置launch.json文件
点击vscode左侧Run运行 选择C++(GDB/LLDB) 点击创建launch.json文件
修改项目名称为无后缀文件名
修改后文件内容如下
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
配置tasks.json
ctrl+shift+p 输入task 选择Tasks:Run Task
选择第一个没有配置的任务…配置任务
选择使用模板创建tasks.json文件
选择Others、选择配置tasks
加入cmake编译的命令
修改后文件内容如下
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "make build",
"type": "shell",
"command": "cd ./build ;cmake .. ;make",
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "clean",
"type": "shell",
"command": "make clean"
}
]
}
编辑CMakeLists.txt
如果只是简单编译main.cpp 可以编辑如下
cmake_minimum_required(VERSION 2.8)
project(hello)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE "Debug")
add_executable(${PROJECT_NAME}
main.cpp
)
测试
配置完最好重启一下vscode,它才会在最下方显示cmake编译、调试、运行的按钮
写个最简单的hello_world程序测试
main.cpp
#include <iostream>
int main(void)
{
std::cout<<"hello world"<<std::endl;
return 0;
}
点击运行,有显示hello world即配置成功