Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C VS代码的Pkg配置?_C_Visual Studio Code_Gstreamer_Vscode Settings - Fatal编程技术网

C VS代码的Pkg配置?

C VS代码的Pkg配置?,c,visual-studio-code,gstreamer,vscode-settings,C,Visual Studio Code,Gstreamer,Vscode Settings,我希望用VS代码在Linux Virtualbox中运行GStreamer Hello World示例 Gstreamer GStreamer 手动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

我希望用VS代码在Linux Virtualbox中运行GStreamer Hello World示例

Gstreamer GStreamer

手动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文件中。具体怎么做对我来说很重要

我从一个launch.json文件开始,我相信它是由微软的C/C++插件在VS代码中创建的。我没有添加CMakeLists文件。VS代码中没有安装其他扩展

我当前的launch.json文件:test17左右

{
    "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在寻找什么

编辑/评论:显然这不是一个新问题

我只是没有看到一个明确的解决方案。来自DarkTrick的解决方案可行,但相当丑陋。丑陋到足以将其推到VisualStudio而不是VS代码。另一个选项是将CMakeLists.txt与VS代码一起使用。它使用多个.vscode文件,但至少它们是生成的,而不是仅仅被黑客攻击


其他人有没有一个简单的解决方案,可以将pkg配置与VS代码和launch.json一起使用?

因此,在这里学到了一些东西。三个文件(都在.vscode目录中)管理该进程

json处理运行和调试过程。 c_cpp_properties.json处理intellisense,但不处理编译。 json处理构建和编译过程。 虽然我能够确定,为了运行'pkg config-cflags-libs gstreamer-1.0',它需要用双引号括起来,然后用单引号反向括起来,但我无法让任何工具以这种方式协调工作

相反,只需在终端中不带引号地运行$pkg config-cflags-libs gstreamer-1.0即可。该shell命令返回:

-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
手动获取那些include-I和library-l元素,并将它们放置在tasks.json和c_cpp_properties.json文件中的适当位置。这就行了。我可以使用intellisense来理解代码,我可以一步一步地调试内容

一路上有几个小把戏。使用VS代码生成三个文件中的每一个。tasks.json和launch.json将在您尝试运行和调试时传播。您可以通过查找intellisense红色曲线错误来生成c_cpp_properties.json文件。查找灯泡图标,选择它。添加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
}

但为什么要修改launch.json?您需要更改tasks.json,特别是C/C++:gcc构建活动文件任务。嗯?我以为tasks.json是根据launch.json的输入生成的文件?不。launch.json是调试器设置。tasks.json包含用于编译或其他任何操作的命令。在生成的tasks.json文件的底部是内容详细信息:由调试器生成的任务。天气晴朗。我知道我可以强制对生成的文件执行操作,但这看起来像是作弊。你有关于这应该如何工作的参考资料吗?许多thx。您应该修改tasks.json。即使任务是自动生成的,我也认为它只是一个可以自由修改的模板。避免复制粘贴pkg配置输出的一种可能方法是将编译器命令放入文件中,然后从tasks.json以shell脚本的形式运行它。不确定是否有更干净的方法。你说得对。。但我要说。手动操作真的让我想起了为什么我们喜欢JS和Python2,C/C++在细节中是如何工作的。如果你不明白细节是如何运作的,你会不知何故,以某种方式陷入困境。