用于 GTK 开发的 VS Code C/C++ 配置
VS Code C/C++ configuration for GTK development
我正在尝试为 C/C++ 在 Linux Ubuntu 上的 VS Code 中进行编程设置一个友好的环境。多年来我一直在使用 Visual Studio 和 Code Blocks,但是 VS Code 设置非常不清楚,以至于我几乎无法理解文档主题。目前我正在尝试编译一些“hello world”程序,所以应该不难。
假设我正在尝试构建 运行 GTK-3 hello world program。执行此操作的命令行指令是:
gcc hello_world.c `pkg-config --cflags --libs gtk+-3.0`
从 bash 开始使用时效果非常好。所以首先我创建了一个名为 GTK-devel
的配置 c_cpp_properties.json
,它应该编译它。 json 文件内容为:
{
"configurations": [
{
"name": "GTK-devel",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++14",
"intelliSenseMode": "linux-gcc-x64",
"compilerArgs": [
"`pkg-config --cflags --libs gtk+-3.0`"
]
}
],
"version": 4
}
第一个问题来了:VS Code中的配置是什么?在 Visual Studio 或 Code::Blocks 中,类似的事情在直觉上是清晰且不可理解的 - 只需设置您需要的一切,然后在编译前在某处(菜单、对话框等)选择它。我想在 VS Code 中它是不同的东西,docs 根本没有解释 - 它只是说可以创建配置,但没有提到如何使用它。此外,没有可以 select 它的地方(终端、任务等),甚至在菜单等任何地方都看不到它
第二个问题与任务有关。因此,如果配置方法失败,我决定设置一个可以从主菜单清楚地访问的任务。 tasks.json
文件包含以下内容:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc compilation",
"command": "/usr/bin/gcc `pkg-config --cflags --libs gtk+-3.0`",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "kompilator: /usr/bin/gcc GTK3"
}
]
}
当我从菜单中选择时 Terminal -> Run build task -> C/C++: gcc compilation
就调用指令而言,一切似乎都很好,但缺少库错误(包含并存在于系统中):
"/usr/bin/gcc `pkg-config --cflags --libs gtk+-3.0`" -g /home/user/Programming/hello_world/hello_world.c -o /home/user/Programming/hello_world/hello_world
/bin/sh: 1: /usr/bin/gcc -pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0: not found
这里出现了第三个问题:同样,docs 并没有真正解释什么是终端。它说它默认为 $SHELL
,但如果是这样,为什么库对编译器不可见?
所以最后一个问题是:VS Code 是真的吗IDE 或者它只是一种营销手段,它可以用来做很多不同的事情一个地方,但实际上最好为每种语言等使用专用工具,因为设置问题会成功地分散您的注意力,使您无法完成真正应该做的事情?
我花了四个小时终于找到了解决办法。它很简单,一半脏。我们开始吧:
此代码:
`pkg-config --cflags --libs gtk+-3.0`
产生这样的东西(这是我的环境,例如):
-pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
VScode 不支持 `.所以我们所要做的就是复制并粘贴 task.json
:
中的每个参数
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}",
"-pthread",
"-I/usr/include/gtk-3.0",
"-I/usr/include/at-spi2-atk/2.0",
"-I/usr/include/at-spi-2.0",
"-I/usr/include/dbus-1.0",
"-I/usr/lib/x86_64-linux-gnu/dbus-1.0/include",
"-I/usr/include/gtk-3.0",
"-I/usr/include/gio-unix-2.0",
"-I/usr/include/cairo",
"-I/usr/include/pango-1.0",
"-I/usr/include/fribidi",
"-I/usr/include/harfbuzz",
"-I/usr/include/atk-1.0",
"-I/usr/include/cairo",
"-I/usr/include/pixman-1",
"-I/usr/include/uuid",
"-I/usr/include/freetype2",
"-I/usr/include/libpng16",
"-I/usr/include/gdk-pixbuf-2.0",
"-I/usr/include/libmount",
"-I/usr/include/blkid",
"-I/usr/include/glib-2.0",
"-I/usr/lib/x86_64-linux-gnu/glib-2.0/include",
"-lgtk-3",
"-lgdk-3",
"-lpangocairo-1.0",
"-lpango-1.0",
"-lharfbuzz",
"-latk-1.0",
"-lcairo-gobject",
"-lcairo",
"-lgdk_pixbuf-2.0",
"-lgio-2.0",
"-lgobject-2.0",
"-lglib-2.0"
],
差点忘了。要智能感知文件 c_cpp_properties.json
只需在 includePath
:
添加两个模式
"includePath": [
"${workspaceFolder}/**",
"/usr/include/**",
"/usr/lib/x86_64-linux-gnu/**"
]
就是这样
我正在尝试为 C/C++ 在 Linux Ubuntu 上的 VS Code 中进行编程设置一个友好的环境。多年来我一直在使用 Visual Studio 和 Code Blocks,但是 VS Code 设置非常不清楚,以至于我几乎无法理解文档主题。目前我正在尝试编译一些“hello world”程序,所以应该不难。
假设我正在尝试构建 运行 GTK-3 hello world program。执行此操作的命令行指令是:
gcc hello_world.c `pkg-config --cflags --libs gtk+-3.0`
从 bash 开始使用时效果非常好。所以首先我创建了一个名为 GTK-devel
的配置 c_cpp_properties.json
,它应该编译它。 json 文件内容为:
{
"configurations": [
{
"name": "GTK-devel",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++14",
"intelliSenseMode": "linux-gcc-x64",
"compilerArgs": [
"`pkg-config --cflags --libs gtk+-3.0`"
]
}
],
"version": 4
}
第一个问题来了:VS Code中的配置是什么?在 Visual Studio 或 Code::Blocks 中,类似的事情在直觉上是清晰且不可理解的 - 只需设置您需要的一切,然后在编译前在某处(菜单、对话框等)选择它。我想在 VS Code 中它是不同的东西,docs 根本没有解释 - 它只是说可以创建配置,但没有提到如何使用它。此外,没有可以 select 它的地方(终端、任务等),甚至在菜单等任何地方都看不到它
第二个问题与任务有关。因此,如果配置方法失败,我决定设置一个可以从主菜单清楚地访问的任务。 tasks.json
文件包含以下内容:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc compilation",
"command": "/usr/bin/gcc `pkg-config --cflags --libs gtk+-3.0`",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "kompilator: /usr/bin/gcc GTK3"
}
]
}
当我从菜单中选择时 Terminal -> Run build task -> C/C++: gcc compilation
就调用指令而言,一切似乎都很好,但缺少库错误(包含并存在于系统中):
"/usr/bin/gcc `pkg-config --cflags --libs gtk+-3.0`" -g /home/user/Programming/hello_world/hello_world.c -o /home/user/Programming/hello_world/hello_world
/bin/sh: 1: /usr/bin/gcc -pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0: not found
这里出现了第三个问题:同样,docs 并没有真正解释什么是终端。它说它默认为 $SHELL
,但如果是这样,为什么库对编译器不可见?
所以最后一个问题是:VS Code 是真的吗IDE 或者它只是一种营销手段,它可以用来做很多不同的事情一个地方,但实际上最好为每种语言等使用专用工具,因为设置问题会成功地分散您的注意力,使您无法完成真正应该做的事情?
我花了四个小时终于找到了解决办法。它很简单,一半脏。我们开始吧:
此代码:
`pkg-config --cflags --libs gtk+-3.0`
产生这样的东西(这是我的环境,例如):
-pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
VScode 不支持 `.所以我们所要做的就是复制并粘贴 task.json
:
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}",
"-pthread",
"-I/usr/include/gtk-3.0",
"-I/usr/include/at-spi2-atk/2.0",
"-I/usr/include/at-spi-2.0",
"-I/usr/include/dbus-1.0",
"-I/usr/lib/x86_64-linux-gnu/dbus-1.0/include",
"-I/usr/include/gtk-3.0",
"-I/usr/include/gio-unix-2.0",
"-I/usr/include/cairo",
"-I/usr/include/pango-1.0",
"-I/usr/include/fribidi",
"-I/usr/include/harfbuzz",
"-I/usr/include/atk-1.0",
"-I/usr/include/cairo",
"-I/usr/include/pixman-1",
"-I/usr/include/uuid",
"-I/usr/include/freetype2",
"-I/usr/include/libpng16",
"-I/usr/include/gdk-pixbuf-2.0",
"-I/usr/include/libmount",
"-I/usr/include/blkid",
"-I/usr/include/glib-2.0",
"-I/usr/lib/x86_64-linux-gnu/glib-2.0/include",
"-lgtk-3",
"-lgdk-3",
"-lpangocairo-1.0",
"-lpango-1.0",
"-lharfbuzz",
"-latk-1.0",
"-lcairo-gobject",
"-lcairo",
"-lgdk_pixbuf-2.0",
"-lgio-2.0",
"-lgobject-2.0",
"-lglib-2.0"
],
差点忘了。要智能感知文件 c_cpp_properties.json
只需在 includePath
:
"includePath": [
"${workspaceFolder}/**",
"/usr/include/**",
"/usr/lib/x86_64-linux-gnu/**"
]
就是这样