我试图了解我的 Makefile 的编译过程。这是我的文件的架构和 Makefile 的内容
Makefile 内容:
# Options de compilation
# (infos debug, tous warnings, standard C99, dossier include)
CC= gcc
CFLAGS= -g -Wall -Wextra -std=c99 -Iinclude
# Options d'édition des liens (pour utiliser math.h)
LDLIBS=-lm
# Identification des exécutables à générer à partir des fichiers de test
EXE=$(patsubst test/%.c, bin/%, $(wildcard test/*.c))
# Identification de tous les fichiers objets associés aux fichiers sources
ALL_OBJ=$(patsubst src/%.c, obj/%.o, $(wildcard src/*.c))
# Règle par défaut : générer tous les exécutables
all: $(EXE)
# Règle générique pour générer les fichiers objets pour les sources (.c -> .o)
obj/%.o: src/%.c
$(CC) $(CFLAGS) -c $< -o $@
# Règle générique pour générer les fichiers objets pour les tests (.c -> .o)
obj/test_%.o: test/test_%.c
$(CC) $(CFLAGS) -c $< -o $@
# Règle générique pour générer les exécutables de test (.o -> executable)
$(EXE): $(ALL_OBJ) obj/test_%.o
$(CC) $^ $(LDLIBS) -o $@
# Règle de nettoyage
clean:
rm -rf bin obj
mkdir bin obj
让我困扰的是,这可能是正常的,但是每当我保存其中一个文件时,我的 src/%.c 文件的 .o 文件会自动创建,并且 2) 为什么它们在 mother 目录中而不是在 obj 目录中? 否则,makefile 工作正常,.o 文件按预期在 obj 目录中,其他 .o 是它们的附加副本。
在这方面,我希望能获得有关 makefile 如何工作的更多详细信息