【问题标题】:How do I compile all .c files in my code directory?如何编译代码目录中的所有 .c 文件?
【发布时间】:2021-06-01 07:36:21
【问题描述】:

我为 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 时有效,但是当我想编译代码目录中的所有内容时 我明白了:

ma​​kefile

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.

【问题讨论】:

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

标签: c makefile mingw


【解决方案1】:

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

使用查找:

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


使用通配符:

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

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

【讨论】:

    猜你喜欢
    • 2018-02-02
    • 1970-01-01
    • 2015-03-29
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 2016-06-15
    相关资源
    最近更新 更多