makefile에서 ifeq 실행 순서문의입니다.
NASM32 = nasm
GCC32 = x86_64-pc-linux-gcc.exe -c -m32 -ffreestanding
LD32 = x86_64-pc-linux-ld.exe -melf_i386 -T ../elf_i386.x -nostdlib -e Main -Ttext 0x10200
OBJCOPY32 = x86_64-pc-linux-objcopy -j .text -j .data -j .rodata -j .bss -S -O binary
OBJECTDIRECTORY = Temp
SOURCEDIRECTORY = Source
all: prepare Kernel32.bin
prepare:
mkdir -p $(OBJECTDIRECTORY)
$(OBJECTDIRECTORY)/EntryPoint.bin: $(SOURCEDIRECTORY)/EntryPoint.s
$(NASM32) -o $@ $<
dep:
@echo ===============Make Dependancy File====================
make -C $(OBJECTDIRECTORY) -f ../makefile InternalDependency
@echo ================Dependancy Search Complete =========
ExecuteInternalBuild: dep
make -C $(OBJECTDIRECTORY) -f ../makefile Kernel32.elf
$(OBJECTDIRECTORY)/Kernel32.elf.bin: ExecuteInternalBuild
$(OBJCOPY32) $(OBJECTDIRECTORY)/kernel32.elf $@
Kernel32.bin: $(OBJECTDIRECTORY)/EntryPoint.bin $(OBJECTDIRECTORY)/Kernel32.elf.bin
cat $^ > $@
clean:
rm -f *.bin
rm -f $(OBJECTDIRECTORY)/*.*
CENTRYPOINTOBJECTFILE = Main.o
CSOURCEFILES = $(wildcard ../$(SOURCEDIRECTORY)/*.c)
ASSEMBLYSOURCEFILES = $(wildcard ../$(SOURCEDIRECTORY)/*.asm)
COBJECTFILES = $(subst Main.o, , $(notdir $(patsubs %.c, %.o, $(CSOURCEFILES))))
ASSEMBLYOBJECTFILES = $(notdir $(patsubst %.asm, %.o, $(ASSEMBLYSOURCEFILES)))
%.o: ../$(SOURCEDIRECTORY)/%.c
$(GCC32) -c %<
%.o: ../$(SOURCEDIRECTORY)/%.asm
$(NASM32) -f elf32 -o $@ $<
InternalDependency:
$(GCC32) -MM $(CSOURCEFILES) > Dependency.dep
Kernel32.elf: $(CENTRYPOINTOBJECTFILE) $(COBJECTFILES) $(ASSEMBLYOBJECTFILES)
$(LD32) -o $@ $^
ifeq (Dependency.dep, $(wildcard Dependency.dep))
include Dependency.dep
endif
====================================================================질문
이런 makefile이 있다면 ifeq구문이 언제 실행이 되는 것인가요????
target이나 의존 설정이 안되어 있어 어느시점에 저 부분이 실행되는지 궁금합니다....
ifeq 구문
ifeq 구문은 makefile의 마지막에 위치하고 있으며
글을 쓰니까 탭을 넣었던 부분이 전부 없어져서 구별이 가지 않지만
사실 Kerenl32.elf와 별개의 구문입니다.
Kernel32.elf: $(CENTRYPOINTOBJECTFILE) $(COBJECTFILES) $(ASSEMBLYOBJECTFILES)
[탭] $(LD32) -o $@ $^
ifeq (Dependency.dep, $(wildcard Dependency.dep))
include Dependency.dep
endif
댓글 달기