我需要将参数**-Wl,-Bstatic,--整个存档**传递给g++。
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "shell: g++.exe build active file",
"command": "C:\\MinGW\\x86\\bin\\g++.exe",
"args": [
"-g",
"${file}",
"-Wl,-Bstatic,--whole-archive",
"-Xlinker",
"-Map=${fileDirname}\\${fileBasenameNoExtension}.map",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "C:\\MinGW\\x86\\bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build"
}
]
}
它会在终端中输出这个。
Executing task: C:\MinGW\x86\bin\g++.exe -g 'c:\Users\remi\Desktop\OK - VSCode\loaderstack.cpp' -Wl,-Bstatic,--whole-archive -Xlinker '-Map=c:\Users\remi\Desktop\OK - VSCode\loaderstack.map' -o 'c:\Users\remi\Desktop\OK - VSCode\loaderstack.exe' <
At line:1 char:84
+ ... e -g 'c:\Users\remi\Desktop\OK - VSCode\loaderstack.cpp' -Wl,-Bstatic ...
+ ~
Missing argument in parameter list.
At line:1 char:93
+ ... Users\remi\Desktop\OK - VSCode\loaderstack.cpp' -Wl,-Bstatic,--whole- ...
+ ~
Missing argument in parameter list.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingArgument
有没有办法在VSCode内部使用这些逗号分隔的参数进行构建?
2条答案
按热度按时间x6h2sr281#
我最初回答这个问题(就像一个哑巴哑巴),好像你在使用Linux,所以我删除了这个答案,并包括了一个新的PowerShell。
这是开发人员在Powershell中使用GCC时的一个常见问题。问题在于,PowerShell在实现其接口和执行命令的方式上是非常程序化的。在Linux中,CLI都是开源的(大多数),并且由开发人员开发,其中powershell是由一家公司创建的,它规定了每个小细节是如何工作的。(两者都有好处,也都有坏处)。PowerShell有方面/特性(或者你想怎么称呼它们),感觉就像编程语言所具有东西,例如PowerShell has scopes,传递给powershell的内容将根据上下文进行解析(或作用域)。您要处理的问题是,您的命令、您通过VS Code v2 Task处理GCC时,由于任务将其处理给Power-shell时所处的上下文,因此无法正确解析GCC。
您有两个选择
选项1
* 第一个选项是使用解析器可以正确交互命令的范围。*
请记住,您使用的是VSCode任务powershell & gcc,为了确保在这三个任务之间成功通信,您需要在通信中包含要使用的作用域。为此,我们要使用
呼叫操作员
&
要使用调用运算符只需格式化初始命令即可执行,如下面的代码块所示:
* 我知道这是一个有效的解决方案,您的问题,我目前在一个Linux系统,我有Windows双启动,但我懒得切换到它,所以只是在情况下需要调整,使用的呼叫操作员我张贴在上面的链接,MS文档是非常好的,非常具体的关于如何实现其软件技术 *
选项2
你的第二个选择与第一个选择完全不同。
您将处理Power-shell无法解析MingW GCC命令的问题,而不是处理作用域问题。
为了处理Power-shell的解析问题,我们将告诉它停止解析命令,此后,将停止解析命令。
停止剖析旗标
--%
(For开发人员的语义策略类型:我认为它在技术上是一个象征,而不是一面旗帜)
使用旗标的方式如下所示:
gcc %--
因此,整个命令应该看起来像这样:
同样,我为上面的stop-parsing标记提供了文档链接,以防需要调整某些内容。
我上面展示的例子是我在一个项目中使用的东西,我工作了很长一段时间,因为那个经验,我更喜欢使用no
还有一些我不太了解的东西,当我读到我DDG到微软网站的链接时,可能会,也许工作是使用参数模式,这似乎类似于停止解析命令?
如果你想了解更多,请点击这里。
jchrr9hc2#
我应该说,我没有尝试过这种方法,但我认为它会起作用。
**我建议你在powershell中使用'**来转义
,
。在你的配置文件中尝试这样做:我不确定它是否有效,但既然它对
echo hell
,o,o
有效,我想一切都会好起来的。请告诉我这种方法是否有效。