我真的无法进入 makefile。在以前的项目中,我在 Makefile 中硬编码了所有编译任务:
all: compile_a compile_b compile_c
compile_a:
${CC} ${CFLAGS} ${A_SRC} -o ${A_OUT}
等等。
但由于最新项目的文件比之前的所有项目都多,我想编写更好的 make 任务,当然还有更少的字符,因为 make 对我来说不是很友好(这让他们很痛苦) ! :-P
我想要的:
- 一个任务来统治他们(只是
make projectname
或make all
,你知道吗?) - 编译每个 C 文件的一个任务(我阅读了一些关于此
%.o: %.c
语法的内容,但没有真正理解它) - 一个链接任务(如何获取所有 .o 文件并在不对每个文件进行硬编码的情况下链接它们?)
- 一项清洁任务(哦,我能做到!)
项目结构是:
bin (binary goes here!)
src
some
directories
are
here
我不知道我是否需要目标文件的目录,我把它们放在了 ./bin
中,我认为这已经足够了,不是吗?
也许我只是需要一个能用简单的语言解释它的人!
编辑: 正如有人指出的那样,没有真正的问题,所以这里是:
- 如何将所有 C 文件递归编译为
bin/(filename).o
- 如何在不知道文件名的情况下链接“bin/”中的所有
.o
文件
也许这有帮助。
最佳答案
试试这个:
CC = gcc
CFLAGS = -c -Wall -g -Os
LD = $(CC)
LDFLAGS = -lfoo
TARGET = MyProject
OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))
all: $(TARGET)
$(TARGET): $(OBJECTS)
$(LD) -o $@ $^ $(LDFLAGS)
# You don't even need to be explicit here,
# compiling C files is handled automagically by Make.
%.o: %.c
$(CC) $(CFLAGS) $^ -o $@
clean:
rm $(TARGET) $(OBJECTS)
关于c - 递归所有 C 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14589614/