我在 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
gcc 不接受通配符 (*.c) 作为输入文件。
您可以编写一个脚本(batch@windows 或 .sh @Linux/Unix)来查找所有源文件并一一编译它们。
但是您应该使用 makefile 或 CMAKE 来组织您的源代码及其构建系统。请阅读这里
我正在做基本上相同的事情(即在 Windows 上使用 MinGW GCC 和 C 文件)。我对要在编译中包含其 .c/.h 文件的每个目录使用 -g 选项。
例如,如果我想编译 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
请注意,对于我放入此类子目录中的任何 .h 文件,我需要从父目录中的 C 文件引用,我必须使用
#include
中的相对路径。
例如,要从位于 myFolder 中的 C 文件引用位于 myFolder/subDir 中的 foo.h,我这样做:
#include "mySubdir/foo.h"
基本上就是这样。
现在,为了完整起见,如果您碰巧像我一样使用 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)
您可以在您的
tesks.json
中使用此任务。当您在 vscode 中按 make
底部时,它将自动在命令提示符中运行 Run C/C++ File
命令。
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: make.exe build active file",
"command": "C:\\Windows\\System32\\cmd.exe",
"args": [
"/c",
"chcp",
"65001>nul",
"&&",
"cd",
"${workspaceFolder}",
"&&",
"make"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
要使用此任务,只需将
makefile
添加到项目工作区文件夹即可。如果工作区的文件结构如下,
C:.
│ makefile
│
├───.vscode
│ launch.json
│ tasks.json
│
├───build
│ test.exe
│
├───include
│ common.h
│ ...
│
├───src
│ common.c
│ ...
│
└───test
test.c
然后
makefile
就会像这样。
# C version lable
CVERLBL = -std=c17
# warning label
WARNLBL = -Wall -Wextra
# optimization label
OPTILBL = -O3
# diagnostics message label
DXMFLBL = -fdiagnostics-color=always
# all labels in one line
LABELS = $(DXMFLBL) $(CVERLBL) $(WARNLBL) $(OPTILBL)
# source files
SOURCES = $(wildcard src/*.c)
# source files for test
TESTSRC = $(wildcard test/*.c)
# include directory
INCDIR = include
# output file location
OUTPUT = build/test.exe
all:
gcc $(LABELS) -g $(SOURCES) $(TESTSRC) -I $(INCDIR) -o $(OUTPUT)
这是构建的输出。
Starting build...
cmd /c chcp 65001>nul && C:\Windows\System32\cmd.exe /c chcp 65001>nul && cd C:\Users\usr\test_project && make
gcc -fdiagnostics-color=always -std=c17 -Wall -Wextra -O3 -g src/common.c test/test.c -I include -o build/test.exe
确保您的环境路径中有
make.exe
(或 mingw32-make.exe
)。