windows安装gtk4并配置VSCode进行编程

下载MSYS2

gtk的网站上是这样写的

There are various methods to install GTK on Windows development machines.

MSYS2

This method is based on the packages provided by MSYS2, which provides a UNIX-like environment for Windows. Both of these repositories also provide packages for a large number of other useful open source libraries.

gvsbuild

This method provides scripts to build the GTK stack from source and outputs libraries and tools that can be consumed by Visual Studio or Meson based projects.

意思是有两种方法在windows平台上安装gtk,一种是用MSYS2,一种是用gvsbuild。我选的是MSYS2这个路径。

https://www.msys2.org/ 从这个网址下载,一打开就可以看到下载链接,很显眼。跟着指导步骤一步一步做。
msys2下载

需要注意的是,按照这个网站上的安装方法,会安上 UCRT64 环境,这个环境是基于MinGW64的,很多教程里边,环境变量,include路径基本都是用的MinGW的路径。

安装GTK4和依赖

在第一步完成时,就打开了一个命令行窗口,如果不小心关了,可以从开始菜单找到MSYS2 UCRT64,点它,启动。运行pacman -S mingw-w64-ucrt-x86_64-gtk4,如果想安装gtk3,则运行pacman -S mingw-w64-ucrt-x86_64-gtk3

安装工具链(可选)

如果要在C、C++等语言下使用GTK,需要安装编译器,比如GCC和它的工具链。pacman -S mingw-w64-ucrt-x86_64-toolchain base-devel,如果是使用Python,需要安装Python包,pacman -S mingw-w64-ucrt-x86_64-python-gobject

配置VSCode

由于VSCode免费,支持多种语言,所以计算机上安了VSCode,不想再安其他的IDE,就配一下VSCode吧。结果遇到了很多坑。

设置环境变量

在系统环境变量的PATH中,填加MSYS2中的msys64\ucrt64\bin,当然,主要还是看哪个目录的bin文件夹下有内容。

设置完环境变量,打开cmd,输入gcc --version,可以看到回显数据。

安装VSCode插件

一个项目管理的Easy C++ project,一个是C/C++代码提示的Microsoft C/C++ 扩展

创建C++项目

vscode打开新建的文件夹,按下键盘F1输入easy cpp,选择Create new C++ proejct,然后选择[G++/GDB] Linux,Windows系统也是选这个,因为只有这个才是用mingw的。

获取include path

打开MSYS2 UCRT64 在命令窗口输入pkg-config --cflags gtk4 | sed 's/ /\n/g' | sed '1,3d;s/-I\(.*\)/\1/g' | sort | uniq,将输出的结果复制。注意,复制的时候,有几项是短横线-打头的,不是文件路径的项,不要复制这些。

设置include path

在vscode按下F1,选择C/C++:编辑配置(UI),这将自动生成c_cpp_properties.json文件并且进入图形界面进行修改。将前面复制的路径,贴到包含路径处。注意,图片只是示例,不是真实值。这里的路径,不太全,需要手动再填加两个,一个是include/gtk-4.0,一个是include/pango-1.0。如果不加这两个,VSCode的代码检查总是会提示有文件找不到,其实没啥事。

设置includePath

修改Makefile

下面是我用的Makefile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CXX		  := g++
CXX_FLAGS := `pkg-config --cflags gtk4`

BIN := bin
SRC := src
INCLUDE := include
LIB := lib

LIBRARIES := `pkg-config --libs gtk4`
EXECUTABLE := main


all: $(BIN)/$(EXECUTABLE)

run: clean all
clear
./$(BIN)/$(EXECUTABLE)

$(BIN)/$(EXECUTABLE): $(SRC)/*.cpp
$(CXX) $(CXX_FLAGS) -I$(INCLUDE) -L$(LIB) $^ -o $@ $(LIBRARIES)

clean:
-rm $(BIN)/*

launch.json和task.json

做出上面的修改后,编译是可以了,但是要手动打命令,如果要点下面的build & run,则需要修改task.json,第一次运行时,会在右下角提示生成task.json。我改成下面这样了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{
"version": "2.0.0",
"tasks": [
{
"label": "Build C++ project",
"type": "shell",
"group": "build",
"command": "make"
},
{
"label": "Build & run C++ project",
"type": "shell",
"group": {
"kind": "test",
"isDefault": true
},
"command": "make",
"args": [
"run"
]
},
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "C:/msys64/ucrt64/bin/g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "C:/msys64/ucrt64/bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
]
}

调试的话,需要配置launch.json。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Debug (gdb)",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/main",
"preLaunchTask": "Build C++ project",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}