VS 代码的 Pkg 配置?

Pkg-config for VS Code?

我希望在 Linux 带有 VS Code 的 Virtualbox 中 运行 GStreamer Hello World 示例。

Gstreamer install directions here.
GStreamer HelloWorld info here.

手动 C build/compile 命令是 $ gcc basic-tutorial-1.c -o basic-tutorial-1 'pkg-config --cflags --libs gstreamer-1.0' 这样效果很好。但是,我希望使用 Visual Studio 代码,并且我正在尝试将 'pkg-config --cflags --libs gstreamer-1.0' 内容推送到我的 launch.json 文件中。 not clear 对我来说究竟如何做到这一点。

我从一个 launch.json 文件开始,我认为它是由 Microsoft 在 VS Code 中的 C/C++ 插件创建的。我没有添加 CMakeLists 文件。 VS Code 中没有安装其他扩展。

我当前的 launch.json 文件:(测试 #17 左右...)

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gcc - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [{ "name": "pkg-config", "value": " --cflags"},{"name": "--libs", "value":  "gstreamer-1.0"}],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: gcc build active file",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

我看到的错误是什么? 无法打开源文件“gst/gst.h” 我不明白 launch.json 在寻找什么。

Edit/Comment:显然这不是一个新问题。

而且我只是没有看到明确的解决方案。 DarkTrick 的解决方案有效,但非常难看。丑到把一个推到 Visual Studio 而不是 VS Code。另一种选择是将 CMakeLists.txt 与 VS Code 结合使用。这使用了多个 .vscode 文件,但至少它们是生成的,而不是仅仅被黑客攻击的。

其他人有一个简单的解决方案来使用 pkg-config 与 VS 代码和 launch.json?

所以,在这里学到了一些东西。 .vscode 目录中的三个文件管理进程。

  • launch.json 处理“运行 和调试”过程。
  • c_cpp_properties.json 处理智能感知但不处理编译。
  • tasks.json 处理构建和编译过程。

虽然我能够确定为了“运行” 'pkg-config --cflags --libs gstreamer-1.0' 它需要用双引号括起来,然后反向单引号,但我永远无法获得任何工具那样和谐地工作。

相反,只是 运行 $ pkg-config --cflags --libs gstreamer-1.0 在终端中(不带引号)。那 shell 命令 returns:

-pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0

手动获取那些包含 (-I) 和库 (-l) 元素,并将它们放置在 tasks.json 和 c_cpp_properties.json 文件中的适当位置。那行得通。我可以使用智能感知来理解代码,我可以通过内容调试步骤。

一路上有几个技巧。使用 VS Code 生成三个文件中的每一个。 tasks.json 和 launch.json 将在您尝试“运行 并调试”时传播。您可以通过查找智能感知红色波浪线错误来生成 c_cpp_properties.json 文件。寻找灯泡图标,select 它。添加 xxx 或编辑 xxx 以在您的项目中为您生成 c_cpp_properties.json 文件。

虽然有点长,但这里是 GStreamer hello world 的三个 .json 控制文件。

launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gcc - Build and debug active file",
            "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": "C/C++: gcc build active file",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

tasks.json:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc build active file",
            "command": "/usr/bin/gcc",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
                "-pthread",
                "-I/usr/include/gstreamer-1.0",
                "-I/usr/include/glib-2.0",
                "-I/usr/lib/x86_64-linux-gnu/glib-2.0/include",
                "-lgstreamer-1.0",
                "-lgobject-2.0",
                "-lglib-2.0"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}

和c_cpp_properties.json:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/include/gstreamer-1.0/**",
                "/usr/include/glib-2.0",
                "/usr/lib/x86_64-linux-gnu/glib-2.0/include"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu17",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64",
            "compilerArgs": [
                "-pthread",
                "-lgstreamer-1.0",
                "-lgobject-2.0",
                "-lglib-2.0"
            ]
        }
    ],
    "version": 4
}