私は、1組のコードで共有ライブラリを構築しようとしていますが、私のMakefileでのこの問題を除いてすべて動作します。ここでは、これまでの私(簡体字)のMakefileです:あなたはmake libfoo.so
を入力するとルールからOS変数を設定する
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
...
ので、私はそれが最初OS = LINUX
を設定することを期待します。そして、bar.o
(libfooの依存関係)になると、どのbar_$(OS).c
を使うべきか分かります。それはbar.oを作るしようとしたとき、$(OS)
が設定されていないことを私に伝えます
make: *** No rule to make target `bar_.c', needed by bar.o. Stop.
:しかし、私はエラーを取得します。しかし、libfoo.soを作成しようとすると、それが最初に起こるべきではないでしょう。そのルールは評価されますか?
これはまったく役に立ちません。私は同じシステムから.soと.dllを構築しているので、私の開発ボックスが動作しているOSは無関係です。 –