VScode调用MSVC编译C++文件

各路大神尝试解决:https://stackoverflow.com/a/78146896/19986873

批处理.bat

@echo off
chcp 65001
if not "%~1"=="" (set pos="%~1" & goto run)
set /p pos=工程路径Workspace path: 
:run
call "E:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
code %pos%

新建文本,然后保存成vscode_MSVC.bat
可以将工程文件夹直接拖到图标上,无需双击打开。这归功于第3行代码。
记得替换你的VsDevCmd.bat绝对路径,这东西主要修改了环境变量,以提供给code。
安利:可用Everything快速搜索VsDevCmd.bat

增强版:记忆上次路径

@echo off
chcp 65001
if not "%~1"=="" (set pos="%~1" & goto init)
for /f %%i in (%~f0) do (set last=%%i)
echo 留空、直接回车以使用上次路径: %last%
set /p pos=工程路径Workspace: 
if "%pos%"=="" (set pos=%last% & goto run)
:init
echo=>>%~f0 & set /p="%pos%"<nul>>%~f0
:run
call "E:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
code %pos%

会将最近打开的路径,回写到自己,所以注意定期清理批处理内的文本

编写过程遇到了坑,记录下

仅当从 VS 开发人员命令提示符处运行 VS Code 时,cl.exe 生成和调试才可用。

https://blog.csdn.net/lichen849/article/details/109626205

call vs start

https://stackoverflow.com/questions/13257571/call-command-vs-start-with-wait-option

对于exe文件,我认为差异几乎无关紧要。
但是要启动 exe,您甚至不需要 .CALL

当启动另一个批处理时,这是一个很大的区别,因为将在同一窗口中启动它,
并且被调用的批处理可以访问相同的变量上下文。
因此,它还可以更改影响调用方的变量。CALL

START将为被调用的批处理创建一个新cmd.exe,如果没有 /b,它将打开一个新窗口。
由于这是一个新上下文,因此无法共享变量。

也不能使用setlocal enabledelayedexpansion,因为VsDevCmd.bat在code启动之前修改了一些环境变量
https://blog.csdn.net/csqxy547/article/details/89856034

无法在启动code后关闭cmd

似乎从命令行启动code,code会返回一个新的cmd实例,没法自动退出,只能自己关掉。
https://code.visualstudio.com/docs/editor/command-line#_how-do-i-detect-when-a-shell-was-launched-by-vs-code

posted @ 2024-03-12 17:27  Nolca  阅读(48)  评论(0编辑  收藏  举报