无事水,但要好好|

Nolca

园龄:6年9个月粉丝:12关注:9

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

本文作者:Nolca

本文链接:https://www.cnblogs.com/nolca/p/18068805

版权声明:本作品采用 收益分享revenue sharing 许可协议进行许可。

posted @   Nolca  阅读(117)  评论(0编辑  收藏  举报
历史上的今天:
2023-03-12 pdf无障碍化,为纯图片pdf识别文字并隐式上字(方便搜索且不影响原图片),pdf转pdf/A,转可编辑式pdf
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 ⏩intro 山姆精
  2. 2 🎸吉他 马叉
  3. 3 ☁升调 山姆精
  4. 4 🐦Flutter Virtual Riot/Madi
  5. 5 🎶纯律 山姆精
  6. 6 👻yeah~Color Bass! VR
🎸吉他 - 马叉
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.