OK, make 및 makefile을 파악할 수 없었습니다. 행운을 빌어 맨페를 통해 읽기를 시도했습니다. 그래서 나는 여기에왔다 : Lmake 파일을 사용하여 별도의 디렉토리에서 파일 컴파일
하나의 파일에서 매우 관리되지 않는 파일들이있다. (나는 OS를 만들려고 노력하고있다.) 그리고 나는이 파일들을 별도의 하위 디렉토리 (아래 구조 참조)로 나누고 make가 그들의 .o 파일로 파일을 만들고, 다른 파일로 그것들을 옮기라고 말한다. 별도의 하위 디렉토리를 만들고 마지막으로 커널 파일로 마무리합니다.
C_SOURCES= main.c
S_SOURCES= boot.s
C_OBJECTS=$(patsubst %.c, obj/%.o, $(C_SOURCES))
S_OBJECTS=$(patsubst %.s, obj/%.o, $(S_SOURCES))
CFLAGS=-nostdlib -nostdinc -fno-builtin -fno-stack-protector -m32 -Iheaders
LDFLAGS=-Tlink.ld -melf_i386 --oformat=elf32-i386
ASFLAGS=-felf
all: kern/kernel
.PHONY: clean
clean:
-rm -f kern/kernel
kern/kernel: $(S_OBJECTS) $(C_OBJECTS)
ld $(LDFLAGS) -o [email protected] $^
$(C_OBJECTS): obj/%.o : %.c
gcc $(CFLAGS) $<
vpath %.c source
$(S_OBJECTS): obj/%.o : %.s
nasm $(ASFLAGS) $<
vpath %.s asem
그건 지금이 내 현재 메이크
Parent directory
(where the makefile will be)
|
|
-------------------------------------------------------------------------
| | | | |
Header SubDir Source SubDir ASM SubDir Obj SubDir Kern SubDir
(Header files) (Source Files) (Assembly Files) (Object Files) (Kernel File)
입니다
: 그래서이 내 의도 한 구조 트리입니다(즉 복잡한 소리 죄송 경우, 잘하면 구조가 명확하게 일을하는 데 도움이됩니다) 이 오류가 튀어 나와 :
ld -Tlink.ld -melf_i386 --oformat=elf32-i386 -o kern/kernel obj/boot.o obj/main.o
ld: cannot find obj/boot.o: No such file or directory
ld: cannot find obj/main.o: No such file or directory
미리 도움을 청하십시오!
제이미.
all: $(SOURCES) link
당신은 소스를 만들 필요가 없습니다, 그래서 그 밖으로 떠나 보자
무엇이 당신의 질문입니까? – bitmask
관련 항목 : [GNU'make' documentation] (http://www.gnu.org/software/make/manual/make.html) – bitmask
가능한 중복 http://stackoverflow.com/questions/1139271/makefiles-with -source-files-in-different-directories –