如何用make编译c文件更有效率

时间:2016-07-12 19:05:18

标签: c++ c makefile compilation

我正在写一个玩具操作系统。由于有很多c文件,gcc命令没有改变(文件名除外),有没有办法自动选择目录中的所有.c文件并编译和链接它们?示例:我创建了一个新文件example.c 我打电话

make

并且makefile为我做了一切。

我不想使用脚本,只使用makefile。

OBJECTS=kasm.o kc.o objects/kb.o objects/screen.o objects/string.o objects/system.o objects/util.o objects/idt.o objects/isr.o
ARGS=-ffreestanding
CC=gcc
TARGET=image/boot/kernel.bin

$(TARGET): $(OBJECTS)
    ld -m elf_i386 -T link.ld -o $(TARGET) $(OBJECTS)

kasm.o: kernel.asm
    nasm -f elf32 kernel.asm -o kasm.o

kc.o: kernel.c
    gcc -m32 -c kernel.c -o kc.o $(ARGS)

objects/kb.o: include/kb.c include/kb.h
    gcc -m32 -c include/kb.c -o objects/kb.o $(ARGS)

objects/screen.o: include/screen.c include/screen.h
    gcc -m32 -c include/screen.c -o objects/screen.o $(ARGS)

objects/string.o: include/string.c include/string.h
    gcc -m32 -c include/string.c -o objects/string.o $(ARGS)

objects/system.o: include/system.c include/system.h
    gcc -m32 -c include/system.c -o objects/system.o $(ARGS)

objects/util.o: include/util.c include/util.h
    gcc -m32 -c include/util.c -o objects/util.o $(ARGS)

objects/idt.o: include/idt.c include/idt.h
    gcc -m32 -c include/idt.c -o objects/idt.o $(ARGS)

objects/isr.o: include/isr.c include/isr.h
    gcc -m32 -c include/isr.c -o objects/isr.o $(ARGS)

编辑:我正在考虑通过通配符实现这一目标

1 个答案:

答案 0 :(得分:5)

通常的方法是使用$(wildcard ...)函数从特定路径生成*.c个文件列表。

要生成相应的.o依赖项列表,您可以使用$(patsubst ...)函数。

要编译的规则应该是%.o: %.c的内置规则,或者您自己覆盖这些规则。
您还可以使用make templates为更复杂的内容提供模块。

相关文档: