LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

config_compile_cpp_by_cmake_in_vscode

2022/2/26

在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即配置成功