当前位置:首页 > 编程学习 > VS Code配置用批处理编译C++

VS Code配置用批处理编译C++

编程学习2022-06-0253330

在VS Code中使用批处理编译的配置

用批处理单独处理编译程序,可以很方便的在VSCode,Editplus,Sublime Text等软件里配置编译功能。


使用VS 2022编译

从VS2015开始使用这个批处理,版本升级后只需要把VS的本机工具命令路径修改一下。


把下面内容保存为vc2022.bat

@echo off

rem =============================
REM  Visual C++ 2022 编译批处理
rem =============================
rem
rem 调用参数 : "$(FilePath)" 
rem
rem "$(FilePath)" 	编译文件路径
rem

rem SETLOCAL 开始批处理文件中环境改动的本地化操作
SETLOCAL

cd /d "%~dp1"

set OUTDIR=%~dp1exeOut
set FILE=%~n1

set EXT=%~x1
if /I "%EXT%" NEQ ".cpp" (
    if /I "%EXT%" NEQ ".c" (	
    	echo 文件类型错误!
    	goto END
    )
)
 
rem 切换到 VS2022 本机工具命令提示 再进行编译
call "C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvars64.bat" > NUL

echo     Visual C++ 2022 编译 %1 ...
echo --------------------------------------------------------------------------------

@if NOT EXIST "%OUTDIR%" (
    echo.
    echo 输出目录不存在,创建输出目录 "%OUTDIR%" ...
    md "%OUTDIR%"
)

rem 编译选项 
set CL=/MP /GS /analyze- /W3 /Gy  /Zc:wchar_t /Gm- /Od /fp:precise /D "WIN32" /D "_DEBUG" /D "DEBUG" /D "_CONSOLE"  /D "_UNICODE" /D "UNICODE"  /errorReport:prompt /WX- /Zc:forScope /Gd /Oy- /Oi /MD /Fe"%OUTDIR%/" /EHsc /nologo /Fo"%OUTDIR%/"  /Fp"%OUTDIR%/" /Fd"%OUTDIR%/" /ZI

echo.
echo cl.exe %* %CL% ...

cl.exe %* %CL%  user32.lib gdi32.lib kernel32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib 

SET RETURN=%ErrorLevel%

echo.
if %RETURN% == 0 (
    echo 编译成功!
) else (
    echo 编译失败,请检查错误!
)

echo.
echo 清理垃圾文件 ...
@if EXIST "%OUTDIR%\%FILE%.obj" (del "%OUTDIR%\%FILE%.obj")
@if EXIST "%OUTDIR%\%FILE%.?db" (del "%OUTDIR%\%FILE%.?db")

rem 编译成功后直接运行程序,vscode可以不用,像editplus、Sublime Text可以取消注释
rem if %RETURN% == 0 (
rem     CD /d "%OUTDIR%"
rem     echo.
rem     echo 正在启动程序 %OUTDIR%\%FILE%.exe...
rem     START %OUTDIR%\%FILE%.exe
rem )

:END

rem ENDLOCAL  结束批处理文件中环境改动的本地化操作
ENDLOCAL


使用VC6编译

使用这个批处理不需要把vc添加到path中。

把下面内容保存为vc6.bat

@echo off

rem =============================
REM  VC++ 6 编译批处理
rem =============================
rem	
rem 调用参数 : "$(FilePath)" -S
rem 
rem "$(FilePath)" 	编译文件路径
rem -S	可选,不链接,只编译输出汇编文件.cod
rem

rem SETLOCAL 开始批处理文件中环境改动的本地化操作
SETLOCAL

cd /d "%~dp1"

set OUTDIR=%~dp1exeOut
set FILE=%~n1

set EXT=%~x1
if /I "%EXT%" NEQ ".cpp" (
	if /I "%EXT%" NEQ ".c" (	
		echo 文件类型错误!
		goto END
	)
)

rem 修改为你机子上VC的路径
CALL E:\Apull\Program\VC6\VC98\Bin\VCVARS32.BAT > nul

echo     VC++ 6.0 编译 %1 %2...
echo --------------------------------------------------------------------------------

@if NOT EXIST "%OUTDIR%" (
	echo.
    echo 输出目录不存在,创建输出目录 "%OUTDIR%" ...
    md "%OUTDIR%"
)


set CL=/nologo /MD /W3 /Ox /EHsc /GX /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Fo"%OUTDIR%/" /Fe"%OUTDIR%/" /Fd"%OUTDIR%/"


IF "%2" == "-S" ( SET CL=%CL% /FAc /Fa"%OUTDIR%/" /c )

echo.
echo cl.exe %1 %CL%  ...

cl %* %CL%
rem  user32.lib gdi32.lib kernel32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib easyx*.lib 

SET RETURN=%ErrorLevel%

echo.
if %RETURN% == 0 (
	echo 编译成功!
) else (
	echo 编译失败,请检查错误!
)

echo.
echo 清理垃圾文件 ...
@if EXIST "%OUTDIR%\%FILE%.obj" (del "%OUTDIR%\%FILE%.obj")
@if EXIST "%OUTDIR%\%FILE%.pdb" (del "%OUTDIR%\%FILE%.pdb")

rem 编译成功后直接运行程序
rem IF NOT "%2" == "-S" (
rem 	if %RETURN% == 0 (
rem 		CD /d "%OUTDIR%"
rem 		echo.
rem 		echo 正在启动程序 %OUTDIR%\%FILE%.exe...
rem 		START %OUTDIR%\%FILE%.exe
rem 	)
rem )

:END

rem ENDLOCAL  结束批处理文件中环境改动的本地化操作
ENDLOCAL


使用GCC编译


把下面内容保存为gcc.bat

@echo off

rem =============================
REM  GCC 编译批处理
rem =============================
rem	
rem 调用参数 : "$(FilePath)" 
rem 
rem "$(FilePath)" 	编译文件路径
rem
rem		Apull apull.net

rem SETLOCAL 开始批处理文件中环境改动的本地化操作
SETLOCAL

cd /d "%~dp1"

set OUTDIR=%~dp1exeOut
set FILE=%~n1
set EXT=%~x1

if /I "%EXT%" NEQ ".cpp" (
    if /I "%EXT%" NEQ ".c" (	
        echo 文件类型错误!
        goto END
    )
)

set GCC=G++
set STD=-std=c++11
if /I "%EXT%" == ".c" (
	set GCC=gcc
	set STD=-std=c11 
)

echo.
echo     %GCC% 8.1.0 x64 编译 %1 ...
echo --------------------------------------------------------------------------------

@if NOT EXIST "%OUTDIR%" (
    echo.
    echo 输出目录不存在,创建输出目录 "%OUTDIR%" ...
    md "%OUTDIR%"
)

rem 修改为你的gcc路径
set P=E:\Apull\Program\MinGW

path=%P%\bin;

rem 编译参数
set out=-o"%OUTDIR%\%FILE%.exe"
set var=-Wall -O2 %STD% -fdiagnostics-color=auto
echo.

echo %GCC% %var% %* %out%

call %GCC% %var% %* %out%


echo.
if %ErrorLevel% == 0 (
    echo 编译成功!
) else (
    echo 编译失败,请检查错误!
)

echo.
echo 清理垃圾文件 ...
@if EXIST "%OUTDIR%\*.obj" (del "%OUTDIR%\*.obj")
@if EXIST "%OUTDIR%\*.tds" (del "%OUTDIR%\*.tds")

:END

rem ENDLOCAL  结束批处理文件中环境改动的本地化操作
ENDLOCAL


配置task.json文件

需要修改文件路径为你电脑上的路径

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "g++",
            "type": "shell",
            "command": "E:/Apull/Program/gcc.bat",
            "args": [
                "${file}",
                //"${fileDirname}/*.cpp",
                "-Ofast"
            ]
        },
        {
            "label": "g++debug",
            "type": "shell",
            "command": "E:/Apull/Program/gcc.bat",
            "args": [
                "${file}",
                "-g",
                "-Og"
            ]
        },
        {
            "label": "VC2022",
            "type": "shell",
            "command": "E:/Apull/Program/vc2022.bat",
            "args": [
                "${file}"
            ]
        },
        {
            "label": "VC6",
            "type": "shell",
            "command": "E:/Apull/Program/vc6.bat",
            "args": [
                "${file}"
            ]
        }
    ]
}


运行效果


vc2022.png VS Code配置用批处理编译C++  编程 技术 电脑 C++ VC 第1张

vc6.png VS Code配置用批处理编译C++  编程 技术 电脑 C++ VC 第2张




扫描二维码推送至手机访问。

版权声明:本文由海阔天空发布,如需转载请注明出处。

本文链接:https://apull.net/html/20220602125509.html

分享给朋友:

相关文章

[转] 深入探讨C++中的引用

[转] 深入探讨C++中的引用

  摘要:介绍C++引用的基本概念,通过详细的应用分析与说明,对引用进行全面、透彻地阐述。  关键词:引用,const,多态,指针  引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖引玉的作用。  引用简介  引用就是某一变量(目标)的一个别名,...

致面向对象技术初学者的一封公开信

致面向对象技术初学者的一封公开信

 致面向对象技术初学者的一封公开信 Alistair Cockburn 著(1996 年2 月),袁峰 译介绍 首先我要解释一下为什么会写这封公开信。这似乎已经成了一种习惯,但这个步骤还是需要的。过去6 年中, 我曾经无数次地在饭店、酒吧、旅店大厅等各种地方以同一种方式度过愉快而漫长的夜晚:和同样追求真理、光明和智慧的伙伴一起探讨面向对象的真谛。现在,我已经可以回答很多当年我遇到的问题。这些同样的问题也在困扰着我的一位新同事,在一家饭店里,我花了整整一个晚上和他讨...

用vb模拟键盘

用vb模拟键盘

  键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作。但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件。那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows中响应键盘事件的机制。   当用户按下键盘上的一个键时,键盘内的芯片会...

6个变态的C语言Hello World程序

6个变态的C语言Hello World程序

下面的六个程序片段主要完成这些事情:输出Hello, World混乱C语言的源代码下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过。hello1.c    #define _________ } #define ________ putchar #define _______ main #define _(a) ________(a); #define ______ _______(){ #define...