VSCode使用MinGW中的go并支持CGO

本文介绍了如何在Windows环境下,特别是使用VSCode时,配置MinGW以解决Go语言的CGO问题,包括设置PATH环境变量和调整Go插件配置以确保正确编译和执行C/C++程序。

在Windows中,如果想使用Linux下的一些命令或者开发工具,可以安装Cygwin或者MinGW,MinGW相比Cygwin要轻量得多,笔者就安装的MinGW,但是安装MinGW后,如果把它加到Windows系统的PATH环境变量中,则可能会与Windows本身的安装的一些程序冲突。最好的办法是在使用的时候临时修改PATH环境变量。

本文就介绍一下如何在VSCode中使用MinGW中的Go。如果Go程序中使用了CGO,则使用Windows中直接安装的Go版本,会由于找不到C/C++编译器而编译失败。Go默认是使用GCC/G++来编译C/C++程序的,Windows中直接安装的版本由于找不到GCC/G++,是不会启用CGO的。要想使用CGO,最好使用MinGW中的Go。

假设MinGW是安装在G:/msys64/mingw64,Windows系统PATH中没有添加MinGW路径,要想在VSCode中使用MinGW中的程序,则需要在VSCode的settings.json中设置PATH环境变量:

"terminal.integrated.env.windows": {
    "PATH":"G:/msys64/mingw64/bin/;${env:PATH}"
  },

这样VSCode中启用的控制台就可以使用MinGW中的程序了。

但是VSCode中的Go插件,并不会使用它,需要另外在settings.json中设置

"go.goroot": "G:/msys64/mingw64/lib/go",
  "go.toolsEnvVars": {
    "PATH" : "G:/msys64/mingw64/bin/;${env:PATH}"
  },

${env:PATH}是为了使用系统中的PATH路径,这样在Go中使用exec.Command执行外部程序时,可以在系统路径中搜索。此设置需要vscode-go插件v0.40.0及以上版本,低版本不支持。

如果Go项目中需要根据条件编译不同的代码,比如使用了debug标签(tag),要想在在运行/调试时,使用相应的标签,需要在launch.json中进行配置buildFlags参数:

{
	// 使用 IntelliSense 了解相关属性。
	// 悬停以查看现有属性的描述。
	// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
	"version": "0.2.0",
	"configurations": [
		{
			"name": "本机",
			"type": "go",
			"request": "launch",
			"mode": "auto",
			"program": "${workspaceFolder}/app",
			"args": [
				"-console=true",
			],
			"output": "${workspaceFolder}/app/debug",
			"buildFlags": [
				"-tags=debug"
			]
		}
	]
}

VSCode是使用了gopls来处理Go文件,如果要启动不用的标签,也需要单独设置,settings.json中设置:

"gopls": {
		"build.buildFlags": ["-tags=debug"]
	},

这样就可以使用MinGW中的Go了,并且支持CGo和条件编译。

### 在 VSCode 中配置使用 MinGW 的方法 #### 1. 安装 MinGW 确保已下载正确安装 MinGW。如果在线下载遇到问题,可以采用离线方式下载[^3]。推荐从 MinGW 官网选择合适的版本进行下载,例如针对 Win64 的个人构建版本[^1]。 完成安装后,将 MinGW 的 `bin` 目录路径添加到系统的环境变量 `PATH` 中。例如,如果 MinGW 安装在 `C:\MinGW\`,则需要将 `C:\MinGW\bin` 添加到 `PATH`。 验证安装是否成功,打开命令提示符输入以下命令: ```bash gcc --version g++ --version ``` #### 2. 配置 VSCodeVSCode 中配置 MinGW 主要涉及以下几个部分:C/C++ 扩展、编译任务和调试配置。 ##### 安装 C/C++ 扩展 确保已安装 Microsoft 提供的 C/C++ 扩展。可以通过扩展市场搜索“C/C++”安装。 ##### 创建 `tasks.json` `tasks.json` 文件用于定义编译任务。在 VSCode 中按 `Ctrl+Shift+P` 打开命令面板,输入 `Tasks: Configure Task` 选择创建 `tasks.json` 文件。以下是示例配置: ```json { "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "g++", "args": [ "-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe" ], "group": { "kind": "build", "isDefault": true }, "problemMatcher": ["$gcc"] } ] } ``` 上述配置中,`${file}` 表示当前编辑的文件,`${fileDirname}` 表示文件所在的目录,`${fileBasenameNoExtension}` 表示文件名(不包含扩展名)[^2]。 ##### 创建 `launch.json` `launch.json` 文件用于配置调试器。同样通过命令面板输入 `Debug: Open launch.json` 来创建或修改该文件。以下是示例配置: ```json { "version": "0.2.0", "configurations": [ { "name": "gcc.exe - 生成和调试活动文件", "type": "cppdbg", "request": "launch", "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe", "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] } ``` 上述配置中,`miDebuggerPath` 指定了 GDB 的路径,确保其与 MinGW 的安装路径一致。 ##### 验证配置 创建一个简单的 C++ 文件 `helloworld.cpp`,内容如下: ```cpp #include <iostream> #include <vector> #include <string> using namespace std; int main() { vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"}; for (const string& word : msg) { cout << word << " "; } cout << endl; } ``` 保存文件后,按 `Ctrl+Shift+B` 运行构建任务,生成可执行文件。随后按 `F5` 启动调试,验证程序输出是否正确。 #### 3. 注意事项 - 如果 MinGW 安装路径包含空格,请确保在 `tasks.json` 和 `launch.json` 中使用双引号包裹路径。 - 确保 MinGW 的版本与项目需求兼容,必要时可升级至最新版本[^3]。 - 如果项目依赖外部库,需在 `tasks.json` 的 `args` 中添加 `-L` 和 `-l` 参数指定库路径和名称。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值