g++ 未在 Windows 上使用通配符文件名进行编译

g++ not compiling with wildcard filenames on Windows

当使用基于通配符的文件名时,突然之间我似乎很难从 Windows(特别是 10)上的命令行编译 C++ 程序(特别是 TDM64 5.1.0)。当给出完整的名称时,它工作正常。我以前做过无数次都没有问题 编辑:但通常不会 windows...我以前对这个工作的记忆一定是错误的。我错过了什么?

C:\Users\Duncan Coulter\Code>dir *.cpp
 Volume in drive C has no label.
 Volume Serial Number is 9EE6-DBBD

 Directory of C:\Users\Duncan Coulter\Code

2016/04/04  01:35 PM             7 869 LittleMan.cpp
2016/04/04  01:35 PM             1 912 main.cpp
               2 File(s)          9 781 bytes
               0 Dir(s)  90 288 394 240 bytes free

C:\Users\Duncan Coulter\Code>g++ *.cpp
g++: error: *.cpp: Invalid argument

C:\Users\Duncan Coulter\Code>g++ main.cpp LittleMan.cpp

你的问题是你写的地方:

g++ *.cpp

g++ 是一个 linux 风格的程序,并期望 shell 为其扩展通配符。 windows 命令 shell 不会这样做 - 它希望各个程序为自己扩展通配符。

最简单的解决方案是下载 cygwin - 它会为您扩展通配符。否则这个问题的答案可能会有用:

https://superuser.com/questions/460598/is-there-any-way-to-get-the-windows-cmd-shell-to-expand-wildcard-paths

我注意到 TDM 基于 GCC 的 MINGW 端口。我发现这个编译器的不同版本实际上对通配符的处理方式不同。例如,从 3.4.2 版开始,它对我来说工作得很好,在 Windows 7:

中编译

但是,当我升级到 GCC v.4.9.2 时,这个批处理文件和我使用的其他批处理文件损坏了(具体来说,*.cpp 无法识别)。这是随 Dev-C++ IDE 一起提供的 MINGW GCC 版本。因为我非常需要这个功能(具体来说,测试编译大量提交的带有未指定随机文件名的学生代码),我实际上不得不降级并恢复到旧版本,为此目的。