나는 간단한 makefile을 만들어서 (내가 몇 가지를 배우기 위해) 리눅스에서 개발하고있는 샘플 애플리케이션을 컴파일하려고하는데, 이상한 문제가있다. 이 일이 왜 표시되지 않습니다 ..Makefile .o 파일 규칙 문제
을 나는이 메이크 파일이 있습니다
# Easily adaptable makefile for Advanced Programming
# Compiler flags
CFLAGS=-Wall -W -g -Wmissing-prototypes
# Indentation flags
IFLAGS=-br -brs -npsl -ce -cli4
# Name of the executable
PROGRAM=ex2
# Prefix for the gengetopt file (if gengetopt is used)
PROGRAM_OPT=config
# Object files required to build the executable
PROGRAM_OBJS=debug.o ${PROGRAM_OPT}.o
# Clean and all are not files
.PHONY: clean all docs indent
all: ${PROGRAM}
# compile with debug
debugon: CFLAGS += -D SHOW_DEBUG -g
debugon: ${PROGRAM}
${PROGRAM}: ${PROGRAM_OBJS}
${CC} -o [email protected] ${PROGRAM_OBJS}
# Generates command line arguments code from gengetopt configuration file
${PROGRAM_OPT}.h: ${PROGRAM_OPT}.ggo
gengetopt < ${PROGRAM_OPT}.ggo --file-name=${PROGRAM_OPT}
# Dependencies
${PROGRAM_OPT}.o: ${PROGRAM_OPT}.c ${PROGRAM_OPT}.h
debug.o: debug.c debug.h
main.o: debug.h ${PROGRAM_OPT}.h
#how to create an object file (.o) from C file (.c)
.c.o:
${CC} ${CFLAGS} -c $<
clean:
rm -f *.o core.* *~ ${PROGRAM} *.bak ${PROGRAM_OPT}.h ${PROGRAM_OPT}.c
indent:
indent ${IFLAGS} *.c *.h
내가 만들 입력되면, 나는 그 말해 오류가 발생 :
make: *** No rule to make target `config.c', needed by `config.o'. Stop.
을 내가 누락 될 수 있습니다 뭔가.하지만 내가 아냐. 잘못된 T, 선은 여기
는 디렉토리에있는 파일 목록 PROGRAM_OPT
에서 명시 적으로있을 수 있습니다 :- config.ggo
- main.c를
- 은 Debug.h
- debug.c는
- 메이크 파일
'getgetopt' 파일은 어떤 파일을 생성합니까? 현재 make는 단지'config.h'를 생성한다는 것을 알기 때문에 ('$ {PROGRAM_OPT} .o : $ {PROGRAM_OPT} .c $ {PROGRAM_OPT} .h'를 통해)'config.c'를 생성하도록 요청하면 그것을하는 방법을 모른다. –
@EtanReisner 필자는 makefile이 gengetopt 명령을 실행한다는 인상하에있었습니다. 기본적으로 .c 및 .h 파일을 생성합니다. –
생성 할 것입니다. 그러나 처음에는 파일을 생성하기 위해 명령을 실행해야한다는 것을 몰랐습니다. make는 룰이 어떤 파일을 생성하는지 알아 내기 위해 룰 출력을 검사하지 않는다. (심지어 첫 번째 실행에 도움이되지 않는다고해도). –