如何编译代码目录中的所有 .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
我们将此作为创建对象和生成可执行文件的不同步骤。
我为 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
我们将此作为创建对象和生成可执行文件的不同步骤。