Makefilesプラットフォームを次のようなステートメントで条件付きにしようとしています。
ifeq ($(UNAME), Linux)
# LINUX version
program_NAME := lib$(TARGET).so
OBJDIR = ../build/linux
endif
ifeq ($(UNAME), MINGW32_NT-6.1)
# WINDOWS version
program_NAME := lib$(TARGET).dll
OBJDIR = ../build/windows
endif
と:
ifeq ($(UNAME), Linux)
# LINUX version
program_INCLUDE_DIRS := \
/home/ben/projects/g2/src \
/home/ben/projects/pulse_IO/src \
/home/ben/projects/core/src
endif
ifeq ($(UNAME), MINGW32_NT-6.1)
# WINDOWS Virtual Machine version
program_INCLUDE_DIRS := \
E:/g2/src \
E:/pulse_IO/src \
E:/core/src
endif
次に、LinuxまたはLinuxホストOS上でVMとして(virtualbox経由で)実行されているWindows7のいずれかでsrcをコンパイルします。私が解決できなかった問題は、オブジェクトファイルとその結果の共有ライブラリまたは実行可能ファイルをプラットフォーム固有のディレクトリ(ソースコードがある場所など)に書き込む方法/build/linux
です/build/windows
。/src
ご覧のとおり、変数を追加しましたが、それを使用して、プラットフォームを条件としてファイルを正しいディレクトリOBJDIR
にリダイレクトする方法がわかりません。.o, .so, .dll, .exe
簡単なはずですが、私の研究は、私が求めているvpath
ものではないと思う使用法に関する記事で行き詰まり続けています。
Makefileの変更が必要だと思う部分は次のとおりです。
LINK.c := $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
$(program_NAME): $(program_OBJS)
$(LINK.c) -shared -Wl,-soname,$(program_NAME) $(program_OBJS) -o $(program_NAME)
私はおそらくautotoolsやcmakeのようなもっと賢いものを使うべきですが、今のところこれを機能させるだけで素晴らしいでしょう。
また、追加する必要があります。オブジェクトファイルのリストは次のように作成されます。
program_C_OBJS := ${program_C_SRCS:.c=.o}
試しました:
program_OBJS := $(addprefix $(OBJDIR)/$program_C_OBJS)
しかし、addprefixが間違ったnoを持っているコンパンを作ってください。引数の