Я пытаюсь создать общую библиотеку с одним набором кода, и все работает, кроме этой проблемы с моим Makefile. Вот мой (упрощенный) Makefile до сих пор:
OBJS = bar.o
libfoo.so: OS = LINUX # These don't seem to happen
libfoo.dll: OS = WINDOWS
# Linux
ifeq ($(OS), LINUX)
CC = gcc
...
# Windows
else ifeq ($(OS), WINDOWS)
CC = i686-pc-mingw32-gcc
...
endif
all: libfoo.so libfoo.dll
libfoo.so: clean $(OBJS)
...
libfoo.dll: clean $(OBJS)
...
bar.o: bar_$(OS).c bar.h
...
Итак, когда вы набираете make libfoo.so
, я ожидаю, что сначала он установит OS = LINUX
. Затем, когда он достигает bar.o
(это зависимость от libfoo), он должен знать, какой bar_$(OS).c
использовать. Однако я получаю сообщение об ошибке:
make: *** No rule to make target `bar_.c', needed by bar.o. Stop.
Что говорит мне, что когда он пытается создать bar.o, $(OS)
не устанавливается. Но не должно ли это быть первым, что происходит, когда я пытаюсь создать libfoo.so, и это правило оценивается?