Я пытаюсь сделать простой make-файл, чтобы скомпилировать пример приложения, которое я разрабатываю в linux (просто чтобы узнать несколько вещей), но у меня возникает странная проблема, что я не понимаю, почему это происходит ..Ошибка в файле makefile .o
у меня есть этот Makefile:
# 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.
я, возможно, отсутствует что-то, но если я нет т ошибаетесь, линия явно там под PROGRAM_OPT
Вот список файлов в каталоге:
- config.ggo
- main.c
- debug.h
- debug.c
- Makefile
Какой файл (ы) создает 'getgetopt'? Прямо сейчас знаю только, что он генерирует 'config.h', поэтому, когда вы его запрашиваете (через' $ {PROGRAM_OPT} .o: $ {PROGRAM_OPT} .c $ {PROGRAM_OPT} .h'), чтобы сгенерировать 'config.c' it не знает, как это сделать. –
@EtanReisner, как я уже сказал, у меня создалось впечатление, что make-файл выполнит команду gengetopt, которая по умолчанию генерирует .c и .h-файл –
. Он будет генерировать его. Но он не знает, что он сделал это (и более того), он не знает, что он должен запустить эту команду для создания этого файла в первую очередь. make не проверяет вывод правила, чтобы выяснить, какие файлы генерирует правило (и даже если это не помогло бы с первым запуском). –