c - 递归所有 C 文件

标签 c makefile

我真的无法进入 makefile。在以前的项目中,我在 Makefile 中硬编码了所有编译任务:

all: compile_a compile_b compile_c

compile_a:
    ${CC} ${CFLAGS} ${A_SRC} -o ${A_OUT}

等等。

但由于最新项目的文件比之前的所有项目都多,我想编写更好的 make 任务,当然还有更少的字符,因为 make 对我来说不是很友好(这让他们很痛苦) ! :-P

我想要的:

  • 一个任务来统治他们(只是 make projectnamemake 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/

相关文章:

c - 为什么在 howstuffworks.com 上发布的这段代码不起作用?

c - 精炼拼写检查 C 程序

将字符串转换为 int : warning: passing argument . .. 从整数中生成指针,无需在 C 中进行转换

linux - config.mk 中的 CPPFlags

C Makefile,用不同的规则编译项目的各个部分

c - free() 函数如何收集有关号码的信息。要释放的字节数

c++ - 从 C 文件创建库时出错

linux - Makefile:当一个文件在另一个文件之后更新时执行特定命令

bash - 使用变量创建命令

makefile - 使用 distcc 在 Raspberry pi 上编译 gnuradio