Это мой первый пост в этом форуме. Извините за беспокойство, но я искал нечто похожее и странно, я не мог его найти. Вот проблема. У меня есть три (основных) файла без заголовков, и я хочу их скомпилировать сразу (если я просто набираю «make») или один за другим (если я укажу имя файла без расширения). Поэтому я построил свой Makefile, но что-то не так в командеmakefile компиляция кратных целей
$(TARGETS): $(BUILDS_DIR)% : $(SRCS_DIR)%.c
, где я получил эту ошибку
марка: *** Никакое правило сделать цель ....
вот полный файл
.SUFFIXES: .c
ROOT = $(addprefix $(PWD), /)
BUILDS_DIR = $(addprefix $(ROOT), builds/)
SRCS_DIR = $(addprefix $(ROOT), src/)
SRCS = $(wildcard $(SRCS_DIR)*.c)
TARGETS = ${SRCS:$(SRCS_DIR)%.c=%}
EXES = ${addprefix $(BUILDS_DIR), $(TARGETS)}
CC = gcc
CFLAGS = -Wall -O3
RM = rm -f
.PHONY: all $(TARGETS) clean
all: $(TARGETS)
$(TARGETS): $(BUILDS_DIR)% : $(SRCS_DIR)%.c
$(CC) $(CFLAGS) \
$< \
-o [email protected]
@echo -e "\n\n\t\t*** Compile successfully! ***\n" ;
clean:
$(RM) $(EXES) \
$(SRCS_DIR)*~
@echo -e "\n\n\t\t*** Cleanup complete! ***\n"
Где я ошибаюсь? Я думаю, что ответ очень глупый и, вероятно, основан на основной ошибке.
заранее спасибо
'Нет правила, чтобы сделать цель' ... что? Какова полная ошибка? –
Запустите 'make -d ...', это покажет вам, что делает 'make'. –
Какой или кто 'make' вы используете? Это [GNU Make] (https://www.gnu.org/software/make/), найденный на большинстве/всех системах GNU/Linux, или 'make' из одного из проектов [BSD] (https: // www.freebsd.org/doc/en/books/developers-handbook/tools-make.html) или сторонний порт? GNU make иногда называется 'gmake'. NetBSD make иногда упоминается или доступен как пакет, известный как [bmake] (http://www.crufty.net/help/sjg/bmake.htm). Примечание. Cmake - это другая система сборки. Я _believe_ 'addprefix' и' wildcard' являются GNU Уточняю, тогда как '.SUFFIXES' довольно старый стиль и не должен быть лишним. – mctylr