【问题标题】:MinGW GCC wildcard to compile all files (Windows)MinGW GCC 通配符编译所有文件(Windows)
【发布时间】:2019-11-29 14:02:24
【问题描述】:

我在 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

【问题讨论】:

  • 您需要使用 POSIX shell 来执行此操作。 POSIX 程序期望 shell 扩展通配符。

标签: c++ c gcc operating-system mingw


【解决方案1】:

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

您可以编写一个脚本(batch@windows 或 .sh @Linux/Unix)查找所有源文件并一一编译。

但您应该使用 makefile 或 CMAKE 来组织您的源代码及其构建系统。请阅读here

【讨论】:

    【解决方案2】:

    我在做基本相同的事情(即在带有 C 文件的 Windows 上使用 MinGW GCC)。对于我希望将其 .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"
    

    基本上就是这样。

    现在,为了完整起见,如果您碰巧像我一样在我的 C 工作中使用 VSCode(这不一定是最佳的,但没问题),那么您可以在 .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)

    【讨论】:

      猜你喜欢
      • 2017-01-14
      • 2021-12-21
      • 1970-01-01
      • 2012-10-18
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      相关资源
      最近更新 更多