征服VS Code(2):C/C++多文件编译:脚本编译

引子

本文是征服VS Code系列的第二篇文章。会讲述2种在VS Code(以下我简称vsc)内实现C/C++多文件编译的方法。

什么样的人可以读这篇文章?

在继续往下看之前,请保证你已经懂得如何使用vsc进行单文件编译。如果觉得还不懂的,可以看征服VS Code的第一篇文章。在那里我会教你一些命令行编译基础。

同样的,这不是说明书,如果你喜欢顺着步骤无脑走下去那就······

废话少说,开始学习!感谢梵高先生支持(bushi)

命令行

在Windows上有两种命令行:cmdPowershell。你如果安装了Linux子系统,你也可以使用wsl来构建Linux环境。

WSL = Windows Subsystem for Linux

我这里推荐使用Powershell。其下脚本文件尾名是.ps1

使用脚本编译

这是很多地方基本上都不会提到的方法。思路就是写一个指挥编译的批处理文件,由这个文件指挥多文件编译。
在Windows上,我们可以用.bat .ps1这类脚本文件,把要输入的命令一行行写在里面,操作系统就会逐行执行下去。

注意:很多操作系统为了防止恶意脚本侵入会禁止执行命令行脚本。这种时候你就需要使用Administer权限来执行脚本。更多信息可以参考MSDN。

我新建了一个Demo的工程文件夹作为演示。其文件组织结构为:
在这里插入图片描述
Compile_Run.ps1是我写的编译脚本,因为有了这个脚本,我们不再需要tasks.json。现在我们要做的事情可以分为以下步骤:

  1. 打开src文件夹;
  2. 把两个.cpp文件一起编译,生成的东西放到bin里面;
  3. 运行生成的文件;
  4. 回到Demo文件夹。

把上述语言翻译为命令,就得到了Compile_Run.ps1的内容:

Set-Location ./src

# Compile
g++ Hello.cpp main.cpp -o ./../bin/Demo -O0 -g -Wall -std=c++17

# Run
Set-Location ./../bin
./Demo.exe

# Back
Set-Location ./..

解释如下:

命令 & 参数解释
Set-Location打开文件夹,cd命令是他的一个别名
g++使用的C++编译器
-o给.exe文件命名,不写这个就默认为a.exe
-g保留调试信息,没有这个就无法使用调试器
-O0禁止优化,调试阶段最好这样做
-Wall警告等级开到最高
-stdC标准或者C++标准

以下是源文件和头文件的内容:

// main.cpp
#include "./../include/Hello.h"

int main(){
    Hello h;
    h.Say();

    return 0;
}
// Hello.cpp
#include "./../include/Hello.h"
#include <iostream>

void Hello::Say(){
    std::cout << "Hello World!" << std::endl;
}
// Hello.h
#ifndef __HELLO_H__
#define __HELLO_H__

struct Hello
{
    void Say();
};

#endif

提示:#include这个预处理命令只是把头文件内容复制粘贴到源文件中,所以我在文件名上就标注了路径帮助预处理器找到头文件。

安装一个Code Runner插件,你就可以直接按下CtrlAltN运行脚本了。
运行结果:

[Running] powershell -ExecutionPolicy ByPass -File "d:\pspro\C_C++_pro\Demo\Compile_Run.ps1"
Hello World!

[Done] exited with code=0 in 2.031 seconds

在这里插入图片描述

调试

调试需要的是launch.json文件,戳一下左边那只甲虫,选择调试,会生成一个.vscode文件夹,里面有我们熟悉的两个文件。其中的task.json已经被我们的脚本替代,直接删掉就行。我们需要修改的是launch.json里面的两行

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "调试",
            "type": "cppdbg",
            "request": "launch",
            // 修改下面这一行的路径为到生成exe文件的路径
            "program": "${workspaceFolder}\\bin\\Demo.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\pspro\\mingw64\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": false
                }
            ],
           	// 这行注释掉,我们手动编译就行
            // "preLaunchTask": "C/C++: g++.exe 生成活动文件"
        }
    ]
}

按下F5,你就可以开启调试了。注意编译的时候一定要加入-g参数。
在这里插入图片描述

结语:关于CMake

这样的脚本编译算是我一拍脑袋想出来的一个歪方法。更多人会建议你使用CMake来做多文件编译,但CMake并不是一下子就能看懂上手的,这个方法适合暂时还过渡不了同学实现多文件编译。

此外,使用CMake进行多文件编译我会写在本系列的第三篇文章,有心去等的不妨点个关注。有错误敬请在评论区指出。感谢您的观看。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值