macOS每次通过VS Code C/C++扩展编译运行C文件时反复请求权限
解决VS Code C/C++扩展在macOS上运行时的权限弹窗问题
问题原因
VS Code的C/C++扩展直接启动编译后的可执行文件时,macOS会将该可执行文件视为独立程序触发系统权限校验;而通过终端运行时,程序继承终端已有的文件访问权限,因此不会弹出授权提示。
解决方案
1. 修改tasks.json,让程序通过终端运行
通过配置任务,让编译后的程序在VS Code内置终端中启动,继承终端的权限:
- 打开命令面板(
Cmd+Shift+P),输入Tasks: Configure Task,选择C/C++: gcc build active file - 将tasks.json替换为以下配置,新增一个依赖编译任务的运行任务:
{ "version": "2.0.0", "tasks": [ { "type": "cppbuild", "label": "C/C++: gcc build active file", "command": "/usr/bin/gcc", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "Task generated by Debugger." }, { "label": "Run C Program", "type": "shell", "command": "${fileDirname}/${fileBasenameNoExtension}", "dependsOn": "C/C++: gcc build active file", "presentation": { "reveal": "always", "panel": "shared" }, "problemMatcher": [] } ] }
之后通过Cmd+Shift+B选择Run C Program即可一键编译运行,程序会在VS Code内置终端启动,不会触发权限弹窗。
2. 配置launch.json,调试时用外部终端运行
如果习惯用调试按钮运行,修改launch.json让程序在系统终端启动:
- 打开launch.json(调试面板点击齿轮图标),添加
"console": "externalTerminal"配置:
{ "version": "0.2.0", "configurations": [ { "name": "gcc - Build and debug active file", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": false, "console": "externalTerminal", "MIMode": "lldb", "preLaunchTask": "C/C++: gcc build active file" } ] }
点击调试按钮后,程序会在系统终端中启动,继承终端的文件访问权限,不再弹窗。
3. 简化终端手动编译步骤(可选)
如果偶尔需要用终端编译,可以写个简单的shell脚本自动清理旧文件并编译运行:
创建run_c.sh文件,内容如下:
#!/bin/bash filename=$1 output=${filename%.c} rm -f $output gcc $filename -o $output ./$output
赋予执行权限:chmod +x run_c.sh
之后运行时只需执行:./run_c.sh yourfile.c,自动完成清理、编译、运行流程。
内容的提问来源于stack exchange,提问作者Ahmad Istaitih
相关产品推荐
相关产品推荐

