[c/c++]vscode下配置cmake环境

前提

cmake – 构建工具
make工具链:gcc 正对windows有mingw

20240402更新 CMakeList

使用vscode的cmake工具,ctrl+shif+p :QUICK start

编译目标

cmake_minimum_required(VERSION 3.0.0)
project(mscrewmotor VERSION 0.1.0 LANGUAGES C)
message("===========CMAKE START==============")
include(CTest)
enable_testing()

set(ROOT_DIR "C:/User/")

message(${ROOT_DIR})
include_directories(${ROOT_DIR}/test)
set(SRC_LIST ${ROOT_DIR}/test/main.c )

#设置可执行文件输出路径
set(EXECUTABLE_OUTPUT_PATH  ${PROJECT_SOURCE_DIR}/build)
#设置可执行文件输出路径
set( CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/build) 
#生成可执行文件(.exe) 
add_executable(mscrewmotor ${SRC_LIST})  


set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack) 

多目标的cmakelist

根目录的makelist 通过add_subdirectory 添加多个子目录的编译目标

add_subdirectory (${PROJECT_SOURCE_DIR}/test/mscrewmotor)

vscode 的output窗口无法对错误进行高亮-很难受

即使增加add_compile_options(“-fdiagnostics-color=always”) 也不好使

vscode切换编译对象/切换调试对象

在这里插入图片描述

目的

因为需要使用makefile来管理多个文件,makefile针对不同的平台编写方式有不一样,则需要通过cmake工具自动生成对应平台的makefile文件。前提需要CmakeLists.txt文件;

环境

windows 下使用vscode+cmake调试c/c++;
通过搭建cmake的环境,对tasks.json和的作用有了一定的认识。
整体的调用过程,在“”动作之前先完成preLaunchTask(在launch.json中指定)任务,完成之后再配置launch.json;

launch.json

用来配置如何启动调试程序,程序的位置,调试的工具,所传参数等。

    "configurations": [

        {
            "name": "gcc.exe - 生成和调试活动文件",       //显示在“调试”(Run)侧边栏的名称;
            "type": "cppdbg",                           //类型,针对C语言环境不能改;
            "request": "launch",                        //有launch和attach可选,这里填launch,按下F5就可以启动调试了;而不是attach(附加);
            "program": "${fileDirname}\\build\\${fileBasenameNoExtension}.exe",//程序所在路径和程序名,使用了build文件夹保存了编译过程数据
            "args": [],                                 //这里填命令行参数(main函数的形参),如果没有可不填;
            "stopAtEntry": false,                       //true:在开始运行程序时,先暂停一;false:直接运行;
            "cwd": "D:\\MinGW64\\bin",                  //调试程序文件夹;
            "environment": [],                          //临时手动添加环境变量;
            "externalConsole": true,
            "MIMode": "gdb",                            //指定调试器gdb
            "miDebuggerPath": "D:\\MinGW64\\bin\\gdb.exe",//调试器程序的路径
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            // preLaunchTask 表示在执行调试前要完成的任务 ,与tasks.json 中 lable 标记的任务名称相同
            "preLaunchTask": "tasks_makeRun"
        }
    ]

其中“preLaunchTask”参数起到了链接tasks.json文件的作用;

tasks.json

执行预定的任务:如何重新生成这个新的程序。
文件可能需要执行多个任务,多个任务间的顺序通过“dependsOn”链接到前置的任务;
例子中包含了三个子任务。
任务一: 创建 build 文件夹;
任务二:执行Cmake命令;
任务三: 执行make编译;
    "tasks": [
        // 任务一: 创建 build 文件夹
        {            
            "type": "shell",
            "label": "tasks_CreateBuildDir",     // lable 标记任务名称
            "command": "mkdir",                  // 命令
            // 传给上面命令的参数,这里是传给 Unix 系统的参数,windows下稍有不用,下边有
            "args": [
                "-p",
                "build"
            ], 
            "windows": {
                "options": {
                    "shell": {
                        "executable": "powershell.exe"
                    }
                },
                "args": [
                    "-Force",
                    "build"
                ],
            },
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
        },
        // 任务二: 执行Cmake命令  在 build 文件夹中调用 cmake 进行项目配置如果想配置比如 release 还是 debug 可以添加参数或者在CMakeLists.txt中设置也行
        {
            "type": "shell",
            "label": "tasks_cmake", // 给这个任务起个名字
            "command": "cmake",
            "args": [
                "-G",
                "\"MinGW Makefiles\"",  
                ".."  // .. 表示build文件夹的上级目录,CMakeLists.txt就放在上级目录中
            ],
            "options": {
                "cwd": "${workspaceFolder}/build"
            },
            "dependsOn":[
                "tasks_CreateBuildDir"  // 表示在 创建目录 任务结束后进行
            ]
        },
        // 任务三: 执行make编译,mingw32-make命令
        {
            "type": "shell",
            "label": "tasks_makeRun",//显示在终端 任务名称中
            "command": "mingw32-make",  // 这个也是MinGW目录下bin目录下的mingw32-make.exe,如果添加了环境变量,这里直接写mingw32-make.exe
            "args": [],
            "options": {
                "cwd": "${workspaceFolder}/build"
            }, // 注意这里是编译到了项目文件夹下的 build 文件夹里面,所以launch.json 中 program 路径要那么设置(  "program": "${fileDirname}\\build\\${fileBasenameNoExtension}.exe",/)
            "dependsOn":[
                "tasks_cmake"  // 依赖于:Cmake任务
            ]
        },

通过“dependsOn”体现了任务之前的执行顺序。
== “command”: “mingw32-make”, 有些通过重定义mingw32-make命令为make==

参考文章:
1.强烈推荐
2.搭建环境

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值