使用 gcc -c *.c 将源代码编译成目标文件

标签 c windows compilation wildcard object-files

我的操作系统是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/

相关文章:

链接静态库时编译 CUDA 代码

c - 链接器找不到信号量函数

python - 我在 Windows 上使用 Python。脚本运行后如何删除?

c++ - x64 进程在 4GB RAM 上可以占用多少内存

c - 结构体指针不能正常工作?

c - C 中动态分配线程

windows - TerminateProcess 与 Ctrl+C

android - 自定义着色器不适用于 Android 设备(使用 LibGDX)

c - 如何定义 MPI_Type_struct,其中结构中涉及通用指针

c - 匹配文件中每个单词的列和行