如何编译代码目录中的所有 .c 文件?

How do I compile all .c files in my code directory?

我为 SDL2 项目制作了一个模板文件夹。我遵循了 Lazy Foo 的教程:http://lazyfoo.net/tutorials/SDL/01_hello_SDL/windows/mingw/index.php 来创建我的 makefile。

我的生成文件:

OBJS = ..\code\main.c
CC = gcc
INCLUDE_PATHS = -IC:\mingw-libraries\include\SDL2
LIBRARY_PATHS = -LC:\mingw-libraries\lib
COMPILER_FLAGS = -w 
LINKER_FLAGS = -lmingw32 -lSDL2main -lSDL2
OBJ_NAME = main.exe

all : $(OBJS)
    $(CC) $(OBJS) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)

所以这在我想编译时有效main.c,但是当我想编译代码目录中的所有内容时 我明白了:

生成文件:

OBJS = ..\code\*.c
CC = gcc
INCLUDE_PATHS = -IC:\mingw-libraries\include\SDL2
LIBRARY_PATHS = -LC:\mingw-libraries\lib
COMPILER_FLAGS = -w 
LINKER_FLAGS = -lmingw32 -lSDL2main -lSDL2
OBJ_NAME = main.exe

all : $(OBJS)
    $(CC) $(OBJS) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)

这是我得到的错误: mingw32-make: *** No rule to make target '..\code\*.c', needed by 'all'. Stop.

您可以使用以下任何一种方式获取代码目录中的*.c文件列表:

使用查找:

OBJS := $(shell find ../code/ -name *.c)


使用通配符:

OBJS = $(wildcard ../code/*.c)

我还建议将 OBJS 的名称更改为类似 SOURCES.
的名称,因为 OBJS 解释为目标文件 (.o) 并在make 我们将此作为创建对象和生成可执行文件的不同步骤。