Я пытаюсь сделать миры простейшими (относительно общие) Makefile
. Я могу использовать для проведения небольшой серии тестов, чтобы узнать C. По какой-то причине Makefile
отказывается понимать мое неявное правило для создания объектных файлов c: %.o: %.c
, я получаю no rule to make target %.o
, необходимый test1.exe
. Ниже мой Makefile
в целом:Makefile не видит мое неявное правило
INC = sglib
CC = gcc
LD = gcc
LDFLAGS =
# On MS-Windows, say "make os=win" to set proper extensions
os =
SO =
EXE =
ifeq ($(os), win)
SO = dll
EXE = .exe
# -fPIC is a no-op on Windows, but causes a compiler warning
CFLAGS = -std=gnu99 -ggdb3 -Wall
else
SO = so
CFLAGS = -std=gnu99 -ggdb3 -Wall -fPIC
endif
all: test1$(EXE)
test1$(EXE): %.o
$(LD) $< -o [email protected]
lib-test.$(SO): %.o
$(LD) -shared $(LDFLAGS) -o [email protected] $<
%.o: %.c
$(CC) $(CFLAGS) -I$(INC) -c $< -o [email protected]
check:
echo Nothing yet!
.PHONY: all clean
clean:
rm -f *.o *.$(SO) test1$(EXE)
Я использую msys на окнах 20 с gnu make 4.2.1
и gcc 6.2.0
. Я озадачен тем, что там не так. это, наверное, что-то простое, но в настоящий момент я кажусь слепым.
'% .o:% .c' сообщает, что он может скомпилировать' anything.c', чтобы получить 'anything.o'. Однако 'test1 $ (EXE):% .o' сообщает make, что он может связывать'% .o' (который получен путем компиляции '% .c' с использованием этого правила), чтобы получить' test1 $ (EXE) '. У вас есть файл с именем '% .c'? – immibis
Whauh! Честно говоря, я не понимаю, что вы здесь делаете. «Пожалуйста, используйте ссылку редактирования на свой вопрос, чтобы добавить дополнительную информацию Кнопку Создать ответ следует использовать только для полных ответов на вопрос -.. Из обзора - Morten Jensen 6 часов назад» я не хочу чтобы добавить дополнительную информацию, я хотел поблагодарить тех, кто ответил на мой пост, и подтвердил, что они были полезными, и указал мне на правильное место. И теперь мне даже запрещено публиковать анонсов :-). Я очень смущен, но в любом случае, спасибо за помощь, наслаждайтесь и хорошо поработайте. – user1648090
@ user1648090 То, как вы благодарите тех, кто отвечает, - это их ответы и/или принятие наиболее полезного. См. [Что делать, когда кто-то отвечает] (http://stackoverflow.com/help/someone-answers). Кроме того, посмотрите [тур]. – Barry