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

How to configure VSCode for GTK3 for intellisense / build / debug and g++

我正在使用

如何使以下内容起作用:

问题:

VSCode 没有找到包含 - 特别是 #include <gtk/gtk.h> 在源代码中是红色的。

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

  • 第一步:打开VSCode中的目标文件夹。
  • 现在你应该有一个新的隐藏文件夹 .vscode 在那里。打开它。
  • 您想将 pkg-config --cflags gtk+-3.0pkg-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的输出。 (不过这次是 -Is。)
  • 底部是 pkg-config --libs gtk+-3.0 的输出(引用和注释)
  • 您可能还需要根据计算机上命令的实际输出调整这些值

进行调试

您想在 .vscode/launch.json 文件中创建一个新的 配置 。在我的设置中 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"
          }
      ]
    }