내 메이크파일에 문제가 있나요?
CC = gcc
OBJS = main.o map.o extended_map.o election.o utilities.o
EXEC = election
DEBUG_FLAG = -DNDEBUG
COMP_FLAG = -std=c99 -Wall -pedantic-errors -Werror
$(EXEC) : $(OBJS)
$(CC) $(DEBUG_FLAG) $(OBJS) -o $@
main.o: main.c map.h election.h test_utilities.h
$(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c
map.o: map.c map.h utilities.h
$(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c
extended_map.o: extended_map.c extended_map.h map.h utilities.h
$(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c
election.o: election.c election.h map.h extended_map.h utilities.h
$(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c
utilities.o: utilities.c utilities.h
$(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c
clean:
rm -f $(OBJS) $(EXEC)
Linux에서 다음 명령을 실행합니다.
-bash-4.2$ ls
election.c extended_map.c main.c makefile mtm_map utilities.c
election.h extended_map.h main.o map.h test_utilities.h utilities.h
-bash-4.2$ make
make: *** No rule to make target `map.c', needed by `map.o'. Stop.
-bash-4.2$
map.c가 mtm_map
현재 폴더 내의 명명된 폴더 에 존재합니다.
답변1
빌드 규칙에는 map.o
다음과 같은 입력 파일이 필요합니다.map.c
현재목차. 이 파일이 실제로 mtm_map
디렉터리에 있다고 말하면 make 규칙은 다음과 같아야 합니다.
map.o: mtm_map/map.c map.h utilities.h
$(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c