MinGW GCC通配符编译所有文件(Windows)

3
我正在使用在Windows上的MinGW GCC编译器, 我需要编译文件夹中的所有c文件!
我已经尝试过:
gcc  *.c -o  Output {folder Path}

我遇到了这个错误。

gcc: error: *.c: Invalid argument 
gcc: fatal error: no input files

编译过程终止。

所使用的GCC版本为4.7.1。


2
你需要使用 POSIX shell 来完成这个任务。POSIX 程序期望通配符由 shell 展开。 - Antti Haapala -- Слава Україні
2个回答

6

gcc不接受通配符(*.c)作为输入文件。

您可以编写一个脚本(在Windows下是batch,Linux/Unix下是.sh),找到所有源文件并逐个编译它们。

但是,您应该使用makefile或CMAKE来组织您的源代码和构建系统。请在这里阅读相关内容。


2
我正在做基本相同的事情(即在Windows上使用MinGW GCC处理C文件)。我对每个目录使用-g选项,以便包含我想要编译的.c/.h文件。
例如,如果我想编译myFolder目录中的所有内容,那么这对我有效:
gcc -g c:\myFolder\*.c -o foo.exe

请注意,您可以在命令行上多次使用-g选项以包含多个目录。例如,我将我的.c/.h文件组织到myFolder内的各个子文件夹中。因此,要告诉gcc关于myFolder内的mySubdir,我会这样做:
gcc -g c:\myFolder\*.c -g c:\myFolder\mySubdir\*.c -o foo.exe

请注意,对于我放置在子目录中且需要从父目录中的C文件引用的任何.h文件,我必须在#include中使用相对路径。例如,要引用位于myFolder/subDir内的foo.h文件,从位于myFolder内的C文件中,我这样做:
#include "mySubdir/foo.h"

And that's basically it. 现在,为了完整起见,如果您像我一样使用VSCode进行C语言工作(这不一定是最优的,但还可以),那么您可以在.vscode/tasks.json中调整此设置,分别指定每个-g选项,例如:
            "command": "C:\\msys64\\mingw64\\bin\\gcc.exe",
            "args": [
                "-g",
                "${fileDirname}/*.c",
                "-g",
                "${fileDirname}/mySubdir/*.c",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],

我的GCC版本是10.3.0。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接