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

我正在使用

  • g ++
  • GTK3
  • VSCode

我如何使以下各项起作用:

  • gts的智能/代码完成
  • 内置于VSCode中
  • 使用VSCode进行调试

问题:

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

pirate96 回答:如何为GTK3配置VSCode以进行智能感知/构建/调试和G ++

要注意的重要一点是,您需要告诉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/fribidi","/usr/include/atk-1.0","/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/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/fribidi","-I/usr/include/atk-1.0","-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 s。)
  • 底部是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"
          }
      ]
    }
本文链接:https://www.f2er.com/3143668.html

大家都在问