我的操作系统是Windows 10.我这次使用命令提示进行编译。
根据我正在阅读的书,编译所有的源文件,并使其成为一个目标文件,(在当前目录中)通过键入以下命令:
gcc -c *.c
它说操作系统将用所有C文件名replace* .c
但是,为什么我得到这个错误?
gcc: error: *.c: Invalid argument gcc: fatal error: no input files compilation terminated.
我在正确的目录中。 当我编译我的源文件与他们各自的名字,它正常工作。 但'* .c'不起作用。
和使用'* .o'链接目标文件时出现同样的错误
那个命令不适用于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)或Linux Windows子系统 (Win 10 1607及更高版本)。
在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$