我想用一組代碼構建一個共享庫,並且一切正常,除了這個問題與我的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時,不應該是這種情況發生的第一件事情,並且該規則會被評估嗎?
這根本沒有幫助。我從同一系統構建.so和.dll,因此我的開發框運行的操作系統是不相關的。 –