VSCode本身不生成.exe,真正起作用的是编译器命令中的-o(GCC/Clang)或/out:(MSVC)参数;必须在tasks.json的args中显式指定完整输出路径,如"./build/${fileBasenameNoExtension}.exe",且目标文件夹需预先存在,同时launch.json的program字段须严格匹配该路径。

VSCode 本身不生成 .exe,真正写入文件的是你调用的编译器(比如 gcc、g++ 或 cl.exe)。默认路径完全取决于你在 tasks.json 的 args 里有没有写 -o(GCC/Clang)或 /out:(MSVC)——没写,就落在源文件同目录;写了,才按你指定的路径输出。
tasks.json 里必须显式用 -o 指定路径
很多人改了 outputDir 或 cwd 就以为能控制输出位置,其实无效。C/C++ 官方扩展根本不读这些字段。起作用的只有编译命令本身的参数。
-
-o后面必须跟**完整路径+文件名**,例如:"./build/${fileBasenameNoExtension}.exe" - 路径用正斜杠
/更稳妥,Windows 下gcc也认;反斜杠容易被 JSON 解析或 shell 当转义符吃掉 - 目标文件夹(如
build)必须**提前存在**,否则gcc报错:cannot create output file: build/main.exe: No such file or directory - 推荐用
${workspaceFolder}而不是${fileDirname},避免多级子目录下路径混乱
launch.json 的 program 必须和 tasks.json 输出路径一致
F5 调试时,VSCode 直接读 launch.json 里的 program 字段去加载可执行文件。如果这里写的路径和 tasks.json 里 -o 指定的不一致,就会报错:Cannot launch program 'xxx.exe': File not found.
-
program值要严格匹配-o后的路径,例如:"${workspaceFolder}/build/${fileBasenameNoExtension}.exe" -
cwd字段建议设成该.exe所在目录(比如"${workspaceFolder}/build"),否则程序里用相对路径读文件会失败 - Windows 上路径中的反斜杠必须双写:
"${workspaceFolder}\build\${fileBasenameNoExtension}.exe"
Code Runner 插件的输出路径要改 executorMap
如果你用 Code Runner(快捷键 Ctrl+Alt+N),它不走 tasks.json,而是直接执行自己配置的 shell 命令。想改 .exe 位置,必须动 settings.json 里的 code-runner.executorMap。
- 原配置:
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt" - 改成:
"c": "cd $dir && gcc $fileName -o $workspaceRoot/build/$fileNameWithoutExt && $workspaceRoot/build/$fileNameWithoutExt" -
$workspaceRoot是 Code Runner 提供的变量,等价于${workspaceFolder};$dir是当前文件所在目录,别混用 - 注意:Code Runner 不支持
${fileBasenameNoExtension}这类 VSCode 变量,只能用它自己的变量名
最常被忽略的一点:CMake 项目里,tasks.json 和 launch.json 都是摆设,真正管输出的是 CMakeLists.txt 里的 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ...)。如果你用 CMake Tools,改配置文件前先确认自己到底走的是哪套构建流程。











