编译使用gcc -c * .c的
我的操作系统的源到目标文件是Windows 10,我用命令提示符这段时间进行编译。编译使用gcc -c * .c的
根据,我读的书,编译所有的源文件,并使它成为一个目标文件,(在当前目录中)做到这一点通过键入以下命令:
gcc -c *.c
它说的操作系统将会取代的* .c与所有的C文件名
但为什么我收到此错误?
gcc: error: *.c: Invalid argument
gcc: fatal error: no input files
compilation terminated.
我在正确的目录中。 而当我编译我的源文件与他们各自的名称,它的工作正常。但'* .c'不起作用。
而且在使用“*的.o”
是该命令不适用于Windows操作系统链接的目标文件同样的错误?如果不是,窗户是什么?
新手在这里。
在Windows中,通配符是而不是支持,因此您看到的错误。
在UNIX虽然,你用什么,会是正确的:
Georgioss-MacBook-Pro:~ gsamaras$ nano main.c
Georgioss-MacBook-Pro:~ gsamaras$ nano fun.h
Georgioss-MacBook-Pro:~ gsamaras$ nano fun.c
Georgioss-MacBook-Pro:~ gsamaras$ gcc -c *.c
Georgioss-MacBook-Pro:~ gsamaras$
嗯,Mingw与我合作很好 – meowgoesthedog
Mingw在内部管理它。在linux中我认为它是依赖于shell的 –
你最好把你的答案说清楚***在Windows CMD ***中。像Cygwin这样的仿真Unix环境仍然处理CLI程序的通配符。 – iBug
在Unix系统和环境(如MSYS或Cygwin的),通配符由shell(取决于)在Windows CMD扩大,但,通配符将被收到的程序扩展和解释。这听起来很奇怪,但cmd.exe
不支持通配符扩展(当翻译),但它的一些内置的命令去做,像COPY
。
使用一个简单的程序来验证它。在Unix
#include <stdio.h>
int main(int argc, char *argv[]){
int i;
for (i = 1; i < argc; i ++)
printf("%s\n", argv[i]);
return 0;
}
输出示例:在Windows
$ ./a.out /*
/bin
/boot
/dev
...
/usr
/var
$ ./a.out /\*
/*
$
输出示例:
C:\Windows\system32>a.exe C:\*
C:\*
C:\Windows\system32>
如果你不想让别的扩大你的程序的通配符,使用MinGW(MSYS)或Windows Subsystem for Linux(Win 10 1607及更高版本)。
跨网络的重复[这里](https://superuser.com/questions/460598/is-there-any-way-to-get-the-windows-cmd-shell-to-expand-wildcard-paths) 。我建议你安装一个unix shell模拟器并避免使用windows命令提示符。 Cygwin就是这样一个可能的模拟器。 – StoryTeller
您确定在当前工作目录中至少有一个'.c'文件吗?否则'* .c'将不会被扩展,因此'gcc'会收到单个命令行参数'* .c'。 –
@GrzegorzSzpetkowski。是的先生。我在正确的目录中。 – Bicolano