C VS代码的Pkg配置?
我希望用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左右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
{
"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++在细节中是如何工作的。如果你不明白细节是如何运作的,你会不知何故,以某种方式陷入困境。