2016-07-12 54 views
4

我目前正在寫一個玩具操作系統。由於gcc命令不會更改(文件名除外)的c文件很多,有沒有辦法自動選擇目錄中的所有.c文件並編譯並鏈接它們?例如:我創建一個新的文件,example.c 的我打電話如何編譯更高效的C文件

make 

,並生成文件做了我的一切。

我不想使用腳本,只有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

噢..我認爲可以通過在objects /目錄中使用makefile將較低的目標合併爲一個目標(yes,makefiles在某種意義上以遞歸方式互相調用) –

+0

OT:幾年前我在大學裏完成我的課程項目,在編譯相同(!)文件時也是如此(就像我在做os內核一樣)。沒有找到答案,並且在我使用Windows時沒有再次遇到這個問題 –

回答