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)
編輯:我想在一個地方的方式,這將使用通配符
請說怎麼這一個不工作,讓我們學會如何解決。 –
噢..我認爲可以通過在objects /目錄中使用makefile將較低的目標合併爲一個目標(yes,makefiles在某種意義上以遞歸方式互相調用) –
OT:幾年前我在大學裏完成我的課程項目,在編譯相同(!)文件時也是如此(就像我在做os內核一樣)。沒有找到答案,並且在我使用Windows時沒有再次遇到這個問題 –