如何为GTK3配置VSCode以进行智能感知/构建/调试和g++

问题描述 投票:0回答:4

我正在使用

  • g++
  • GTK3
  • VSCode

如何让以下功能发挥作用:

  • gtk 的智能感知/代码完成
  • 在 VSCode 中构建
  • 使用 VSCode 调试

问题:

VSCode 未找到包含内容 - 特别是

#include <gtk/gtk.h>
在源代码中为红色。

c++ gtk3 visual-studio-code vscode-debugger
4个回答
22
投票

需要注意的重要一点是,您需要告诉 VSCode 包含路径和编译器标志才能正常工作。

  • 第一步:在VSCode中打开目标文件夹。
  • 现在你应该有一个新的隐藏文件夹
    .vscode
    在那里。打开它。
  • 您想要将
    pkg-config --cflags gtk+-3.0
    pkg-config --libs gtk+-3.0
    的输出应用到它们各自的配置。

使智能感知/代码完成工作

  • 创建文件
    .vscode/c_cpp_properties.json
  • 添加以下内容。

    {
        "env": {
            "myDefaultIncludePath": [
                "${workspaceFolder}",
                "${workspaceFolder}/include"
            ],
            "myCompilerPath": "/usr/local/bin/g++"
        },
        "configurations": [
            {
                "name": "include paths",
                "intelliSenseMode": "g++-8",
                "includePath": [
    
                    "/usr/include/gtk-3.0",
                    "/usr/include/at-spi2-atk/2.0",
                    "/usr/include/at-spi-2.0",
                    "/usr/include/dbus-1.0",
                    "/usr/lib/x86_64-linux-gnu/dbus-1.0/include",
                    "/usr/include/gtk-3.0",
                    "/usr/include/gio-unix-2.0",
                    "/usr/include/cairo",
                    "/usr/include/libdrm",
                    "/usr/include/pango-1.0",
                    "/usr/include/harfbuzz",
                    "/usr/include/pango-1.0",
                    "/usr/include/fribidi",
                    "/usr/include/atk-1.0",
                    "/usr/include/cairo",
                    "/usr/include/pixman-1",
                    "/usr/include/freetype2",
                    "/usr/include/libpng16",
                    "/usr/include/gdk-pixbuf-2.0",
                    "/usr/include/libmount",
                    "/usr/include/blkid",
                    "/usr/include/uuid",
                    "/usr/include/glib-2.0",
                    "/usr/lib/x86_64-linux-gnu/glib-2.0/include"
    
                ],
                "compilerPath": "/usr/local/bin/g++",
                "cStandard": "c11",
                "cppStandard": "c++17",
                "browse": {
                    "path": [
                        "${workspaceFolder}"
                    ],
                    "limitSymbolsToIncludedHeaders": true,
                    "databaseFilename": ""
                }
            }
        ],
        "version": 4
    }
    
  • 注意,“includePath”的内容是

    pkg-config --cflags gtk+-3.0
    的输出,没有前面的
    -I
    ,并且带有双引号和逗号。 您可能需要根据机器的输出来调整这些值

进行建筑工作

您想要在

.vscode/tasks.json
中创建一个包含以下内容的新任务:

    {
      "type": "shell",
      "label": "gcc debug build active file - with GTK",
      "command": "/usr/bin/gcc",
      "args": [          
          "-g",

                "-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/libdrm",
                "-I/usr/include/pango-1.0",
                "-I/usr/include/harfbuzz",
                "-I/usr/include/pango-1.0",
                "-I/usr/include/fribidi",
                "-I/usr/include/atk-1.0",
                "-I/usr/include/cairo",
                "-I/usr/include/pixman-1",
                "-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/uuid",
                "-I/usr/include/glib-2.0",
                "-I/usr/lib/x86_64-linux-gnu/glib-2.0/include",

          "${file}",

                "-lgtk-3",
                "-lgdk-3",
                "-lpangocairo-1.0",
                "-lpango-1.0",
                "-latk-1.0",
                "-lcairo-gobject",
                "-lcairo",
                "-lgdk_pixbuf-2.0",
                "-lgio-2.0",
                "-lgobject-2.0",
                "-lglib-2.0",

          "-o",
          "${fileDirname}/${fileBasenameNoExtension}"
      ],
      "options": {
          "cwd": "/usr/bin"
      },
      "problemMatcher": [
          "$gcc"
      ],
      "group": {
          "kind": "build",
          "isDefault": true
      }
    } 
  • 注意
    args
    内另外两个缩进的部分。
  • 最上面的一个又是
    pkg-config --cflags gtk+-3.0
    的输出。 (不过,这次是
    -I
    。)
  • 底部是
    pkg-config --libs gtk+-3.0
    的输出(引用并注释)
  • 您可能还需要根据机器上命令的实际输出来调整这些值

进行调试工作

您想要在 .vscode/launch.json 文件中创建一个新的

configuration
。在我的设置中,vscode 一直使用错误的配置,所以我删除了其他配置。以下是文件的完整内容,只有一种配置。

    {
      // Use IntelliSense to learn about possible attributes.
      // Hover to view descriptions of existing attributes.
      // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
      "version": "0.2.0",
      "configurations": [

          {
              "name": "debug with gdb (no build)",
              "type": "cppdbg",
              "request": "launch",
              "program": "${fileDirname}/${fileBasenameNoExtension}",
              "args": [],
              "stopAtEntry": false,
              "cwd": "${workspaceFolder}",
              "environment": [],
              "externalConsole": false,
              "MIMode": "gdb",
              "setupCommands": [
                  {
                      "description": "Enable pretty-printing for gdb",
                      "text": "-enable-pretty-printing",
                      "ignoreFailures": true
                  }
              ],
              "preLaunchTask": "",
              "miDebuggerPath": "/usr/bin/gdb"
          }
      ]
    }

1
投票

使用怎么样

"`pkg-config --cflags --libs gtk4`"

注意

`pkg-config`

pkg-config之间,它与

不同
'pkg-config'

要查看完整文件,这是我上传的tasks.json和c_cpp_properties.json文件的要点https://gist.github.com/KesunyianAyam/48810a1f4339f496e192f4e94adc6e3b

虽然我的是gtk4,但它可以通过使用

用于gtk3
`pkg-config --cflags --libs gtk+-3.0`

并使用与 gtk3 相关的包含内容


0
投票

不再需要像顶部答案中那样手动指定

tasks.json
中的标志。此问题已于 2021 年修复。请参阅 https://github.com/microsoft/vscode-cpptools/pull/7895

您可以在

args
中的反引号中调用 pkg-config:

        "args": [
            "-g",
            "${file}",
            "`pkg-config --libs --cflags gtk4`",
            "-o",
            "${fileDirname}/${fileBasenameNoExtension}",
        ],

命令替换的

$(...)
语法仍然不起作用。


0
投票

这也适用于 Windows?

© www.soinside.com 2019 - 2024. All rights reserved.