• VSCode C++ 使用Cmake编译多个文件


    VSCode 中对编译运行单个文件时非常友好,基本上不用配置,自动生成的即可运行,
    或者安装Code Run 也可以很方便的运行起来,但是对于有多个类文件存在的情况下,就很糟糕,
    我了解到有两种方式来支持

    1. task.json 中编译的参数
    2. 引入cmake编译 CMakeLists.txt文件

    launch.json

    {
        // 使用 IntelliSense 了解相关属性。 
        // 悬停以查看现有属性的描述。
        // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "name": "g++.exe - 生成和调试活动文件",
                "type": "cppdbg",
                "request": "launch",
                // "program": "${fileDirname}\${fileBasenameNoExtension}.exe",
                "program": "${workspaceFolder}\build\outProject.exe",     // 运行编译之后的文件,需要与CMakeLists.txt 文件中定义的保持一致!!!
                "args": [],
                "stopAtEntry": false,
                "cwd": "${workspaceFolder}",
                "environment": [],
                "externalConsole": false,
                "MIMode": "gdb",
                "miDebuggerPath": "D:\dev\mingw64\bin\gdb.exe",
                "setupCommands": [
                    {
                        "description": "为 gdb 启用整齐打印",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ],
                // "preLaunchTask": "C/C++: g++.exe build active file"
                "preLaunchTask": "Build"        // 指定调用 task.json 脚本中的  Build 任务
            }
        ]
    }
    

    cmake 编译步骤

    1、编写 CMakeLists.txt 文件 写好需要生成的文件名称,以及需要编译的文件
    add_executable(outProject main.cpp swap.cpp)
    2、进入 build 目录下执行 "cmake .." 命令
    3、执行make命令,触发编译 ,windows 平台可以调用mingw64下的 mingw32-make.exe 来编译

    task.json

    {
        "version":"2.0.0",
        "options": {                             
            "cwd": "${workspaceFolder}/build"    // 调用该task.json 任务时,首先进入到 build目录下
        },
        "tasks": [
            { 
                "type": "shell",
                "label": "cmake",          // 构造  "cmake .. " 命令
                "command":"cmake",
                "args": [
                    ".."
                ]
    
            },
            {
                "type": "shell",
                "label": "make",       // 使用make命令来编译,当前window下使用到了mingw64 下的mingw32-make.exe 来触发
                "group": {
                    "kind": "build",
                    "isDefault": true
                },
                "command":"mingw32-make.exe"
            },
            {
                "label": "Build",    // launch.json 文件中调用的 "preLaunchTask": "Build",会调用到此Task
                "dependsOn":[        // 该task下依赖其他两个任务 cmake 、make 任务
                    "cmake",
                    "make"
                ]
    
            }
    
        ],
    
    }
    

    CMakeLists.txt

    project(my_swap)
    
    # 一个依赖类的编译 
    # 参数含义outProject  编译之后的exe 文件  需要编译的源码文件 如果有多个可以依次写
    add_executable(outProject main.cpp swap.cpp)  
    
  • 相关阅读:
    【书目20200917】影响力思维
    Spring AOP +自定义注解 + Spel表达式 实现审计日志
    SPRING BOOT 注解之OBJECTPROVIDER源码追踪
    Activiti~相关概念
    ELK~fluentd多行日志的收集
    k8s~向etc/hosts里添加内容
    maven~本地仓库的指定
    ssh~ Access denied问题解决
    MySQL如何绕过授予information_schema中对象时报ERROR 1044(4200)错误
    Zabbix如何监控SQL Server服务状态
  • 原文地址:https://www.cnblogs.com/ifzy/p/14002298.html
Copyright © 2020-2023  润新知