我的操作系统是Windows 10。这次我使用命令提示符进行编译。
根据我正在阅读的书,要编译所有源文件并使其成为目标文件,(在当前目录中)通过键入以下命令来完成:
gcc -c *.c
它说操作系统将用所有 C 文件名替换 *.c
但为什么会出现此错误?
gcc: error: *.c: Invalid argument
gcc: fatal error: no input files
compilation terminated.
我在正确的目录中。 当我用它们各自的名字编译我的源文件时,它工作正常。但是'*.c' 不工作。
在使用'*.o'链接目标文件时出现同样的错误
该命令不适用于 Windows 操作系统吗?如果不是,Windows 是什么?
这里是新手。
最佳答案
在 Unix 系统和环境(如 MSYS 或 Cygwin)上,通配符由 shell 扩展(取决于),但在 Windows CMD 中,通配符由接收程序扩展和解释。这听起来很奇怪,但是 cmd.exe
不支持通配符扩展(作为解释器),但它的一些内置命令支持,例如 COPY
。
用一个简单的程序来验证一下。
#include <stdio.h>
int main(int argc, char *argv[]){
int i;
for (i = 1; i < argc; i ++)
printf("%s\n", argv[i]);
return 0;
}
Unix 上的示例输出:
$ ./a.out /*
/bin
/boot
/dev
...
/usr
/var
$ ./a.out /\*
/*
$
Windows 上的示例输出:
C:\Windows\system32>a.exe C:\*
C:\*
C:\Windows\system32>
如果你想让其他东西为你的程序扩展通配符,使用MinGW (MSYS) 或 Windows Subsystem for Linux (Win 10 1607 及更高版本)。
关于使用 gcc -c *.c 将源代码编译成目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45660948/