关于使用msys2下gcc编译器无法识别通配符*,导致无法编译的问题

编译时报错如上,在网上找了一会,发现是编译器的问题,编译器无法识别*无法编译,有两种解决方案

(1)避免使用*,直接把文件名输入到json文件里面

(2)更换编译器,这里我换了Mingw下gcc version 8.1.0

下载链接如下,环境的配置网上有很多,这里就不再说了

通过网盘分享的文件:03-Windows中MinGW-w64及GCC的下载、安装与配置.zip
链接: https://pan.baidu.com/s/1rhdQNPtIj1N7ksXGmWJaaQ?pwd=58n5 提取码: 58n5

更换完编译器又发现vscode一直识别不到,在网上查询了下,找到了解决办法

点击JSON配置,在里面添加自己编译器的gcc路径

再次点击运行,编译器即可识别到Mingw下的GCC

点击之后,自动生成json文件后,修改”*.c“后运行,无报错

<think>嗯,用户想知道在msys2 ucrt64环境下,g++编译器是否支持用*.cpp这样的通配符来批量编译多个源文件。首先,我得回忆一下通配符在命令行中的处理机制。一般来说,在Unix-like系统中,shell会负责展开通配符,比如*.cpp会被替换成所有匹配的文件名。而Windows的cmd默认不会展开通配符,这可能引发问题。 根据用户提供的引用内容,特别是引用[3],里面提到Windows的cmd不会展开通配符,而MinGW可能没有正确处理这种情况。用户之前可能在tasks.json中尝试使用*.c,但遇到了问题,于是修改了配置。现在他想知道在msys2的ucrt64环境下,使用g++是否支持这种通配符。 接下来,我需要确认msys2的shell环境。MSYS2提供了类似Unix的环境,默认使用bash作为shell。在bash中,通配符是由shell展开的,所以当用户在MSYS2终端中运行g++ *.cpp -o output时,bash会先展开*.cpp为当前目录下的所有.cpp文件,然后传递给g++。因此,在这种情况下,通配符应该是有效的。 但用户可能是在VSCode的tasks.json中配置编译任务,这时候需要考虑VSCode使用的shell。如果tasks.json中的任务配置没有指定使用bash,而是默认使用cmd,那么通配符可能不会被展开。这时候需要检查tasks.json中的"options"部分,是否有设置正确的shell,比如将"shell"配置为bash,并设置相应的cwd(当前工作目录)。 另外,引用[3]中的例子显示用户之前使用了*.c,但可能因为命令行未展开通配符导致失败,所以修改了配置。对于C++的情况,如果使用msys2的g++,并且确保shell正确展开通配符,应该可以正常工作。需要确认tasks.json中的"args"是否包含*.cpp,并且在正确的shell环境下执行。 总结一下,关键在于使用的shell是否展开通配符。在msys2的bash环境中,直接运行命令是支持的;在VSCode任务中,需要配置使用bash作为shell,并确保cwd正确,才能让通配符生效。否则,可能需要手动列出所有文件,或者使用CMake等构建工具来管理编译过程。</think>在MSYS2 UCRT64环境下,g++编译器通配符`*.cpp`的支持性取决于调用方式: 1. **直接通过MSYS2终端调用** 在MSYS2的bash环境中,默认支持通配符展开。执行以下命令时: ```bash g++ *.cpp -o output.exe ``` Shell会自动将`*.cpp`展开为当前目录下所有`.cpp`文件列表,再传递给g++编译[^3]。 2. **通过VSCode的tasks.json调用** - 需要明确设置`options.cwd`为`${workspaceFolder}`,确保通配符在正确路径下解析 - 推荐显式声明shell类型以强制通配符展开: ```json "options": { "cwd": "${workspaceFolder}", "shell": { "executable": "G:\\develop\\mingw\\msys64\\usr\\bin\\bash.exe", "args": ["-c"] } } ``` - 编译参数建议使用: ```json "args": ["-fdiagnostics-color=always", "-g", "*.cpp", "-o", "${fileDirname}/output.exe"] ``` 3. **Windows CMD的限制** 若未通过MSYS2 shell执行,Windows原生命令行不会自动展开通配符,此时需要手动指定文件列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值