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

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

编程学习2022-06-02130510

在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

分享给朋友:

相关文章

MD5加密VB版

MD5加密VB版

'MD5加密VB版 '调用方法:str=MD5("Apull",32),就能得到"Apull"的32位的MD5。 Private m_lOnBits(30) Private m_l2Power(30) Private Const BITS_TO_A_BYTE = 8 Private Const BYTES_TO_A_WORD = 4 Private Const BITS_TO_A_WORD = 32 Private Fu...

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

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

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

计算机蓝屏代码的含义

计算机蓝屏代码的含义

0 0x0000 作业完成。1 0x0001 不正确的函数。2 0x0002 系统找不到指定的档案。3 0x0003 系统找不到指定的路径。4 0x0004 系统无法开启档案。5 0x0005 拒绝存取。6 0x0006 无效的代码。7 0x0007 储存体控制区块已毁。8 0x0008 储存体空间不足,无法处理这个指令。9 0x0009 储存体控制区块地址无效。10 0x000A 环境不正确。11 0x000B 尝试加载一个格式错误的程序。12 0x000C 存取码错误。1...

HTML与ASCII码表

HTML与ASCII码表

HTML与ASCII码表Standard ASCII set, HTML Entity names, ISO 10646, ISO 8879, ISO 8859-1  Latin alphabet No. 1Browser support: All browsersASCIIHTMLHTMLDecHexSymbolNumberNameDescription32333435363738394041424344454647202122232425262728292A2B...