Makefile을 만드는 것에 대해 많이 알지 못하지만, 나는 make manual을 읽었으며 약간의 진전을 이루었습니다. Makefile이 작동하고 내가 원하는 것을합니다.어떻게이 Makefile을 향상시킬 수 있습니까?
내 상황은 일반적으로 웹 양식을 통해 마킹을 위해 TA에 보내고 컴파일해야하는 1 ~ 3 개의 서로 다른 프로그램이 필요합니다. 각 응용 프로그램의 구조는 'prog.c', 'prog_lib.h'및 'prog_lib.c'입니다. 과거에는 각 프로그램에 대해 별도의 디렉토리를 만들고 각 디렉토리에 별도의 Makefile을 만들어 내부에 포함 된 프로그램을 작성했습니다. 그런 다음 각 폴더를 타르 고 따로 제출하십시오.
최근에 TA는 모든 대상 파일이 하나의 디렉토리에 있고 여러 대상이 빌드 된 하나의 Makefile이 사용자의 개입 없이도 작동하도록 마킹 응용 프로그램을 만들 것을 요구했습니다.
더 많은 경험을 가진 사람이이 Makefile을 개선하고 내 상황이 일반적으로 어떻게 해결되는지 궁금합니다. 나는 다음 과제로 넘어갈 때해야 할 타이핑의 양을 줄이고 여러 장소를 업데이트해야한다.
여기 내 메이크입니다 : 내 경험에
ASSIGNMENT = 3
TARNAME = Assignment$(ASSIGNMENT).tar.bz2
CC = gcc
CFLAGS = -O2 -Wall -ansi -pedantic -W # I like warnings
LDFLAGS = -lm
DEBUG = -g # to resolve symbols in GDB and valgrind
FREQ_OUT = frequency_table
FREQ_SOURCES = frequency_table.c frequency_table_lib.c
FREQ_OBJECTS = frequency_table.o frequency_table_lib.o
DECODE_OUT = decode
DECODE_SOURCES = decode.c decode_lib.c
DECODE_OBJECTS = decode.o decode_lib.o
SOURCES = $(FREQ_SOURCES) $(DECODE_SOURCES)
OBJECTS = $(FREQ_OBJECTS) $(DECODE_OBJECTS)
OUT = $(FREQ_OUT) $(DECODE_OUT)
.PHONY: info
info:
@echo -e "make info\n" \
"\tmake all \t\t\tMake all targets\n" \
"\tmake frequency_table \t\tMakes frequency table\n" \
"\tmake decode \t\t\tMakes decode\n" \
"\tmake dist \t\t\tMakes tar archive of sources and Makefile\n" \
"\tmake clean \t\t\tRemoves all the object files and executables\n" \
"\tmake distclean \t\t\tPerforms clean and removes tar archive"
.PHONY: all
all: $(OUT)
$(FREQ_OUT): $(FREQ_OBJECTS)
$(CC) $(CFLAGS) $(DEBUG) $(LDFLAGS) $(FREQ_OBJECTS) -o [email protected]
$(DECODE_OUT): $(DECODE_OBJECTS)
$(CC) $(CFLAGS) $(DEBUG) $(LDFLAGS) $(DECODE_OBJECTS) -o [email protected]
.o:
$(CC) -c $(CFLAGS) -o [email protected] $<
.PHONY: dist
dist: $(SOURCES)
@echo "Creating tar archive. See $(TARNAME)"
tar cvjf $(TARNAME) $(SOURCES) $(wildcard *_lib.h) Makefile
.PHONY: clean
clean:
rm -f $(OUT) $(OBJECTS)
.PHONY: distclean
distclean: clean
rm -f $(TARNAME)
코드에서 Makefile을 만드는 방법에 대해 잘 모르는 것 같습니다. – Lazer