Я пытаюсь сделать свою платформу Makefiles условно с заявлениями типа:Платформа условного 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 или Windows 7 работает как VM (через виртуальный бокс) на ОС Linux. Проблема, которую мне не удалось решить, заключается в том, как получить объектные файлы и результирующие совместно используемые библиотеки или исполняемые файлы в конкретный каталог платформы, например. /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)
но сделать compains что addprefix имеет неправильный нет. аргументов
реализованы в течение двух лет спустя, что я должен Проб был кросс-компиляции для окон на Linux хосте, вместо того, чтобы один условный Makefile, который может производить собственные исполняемые файлы под обе ОС – bph