Я работаю над проектом C, которому нужна внешняя библиотека с открытым исходным кодом. В частности, ему нужна версия, которую я сам исправил, чтобы добавить некоторые необходимые функции.
В данный момент я использую Makefile, который ожидает статически скомпилированную версию исправленной библиотеки в папке ./lib
(давайте назовем это libpatched.a
) и соответствующие заголовочные файлы в ./include/libpatched
. Ниже приведены основные части вышеупомянутого Makefile:
EXECNAME=MyExecutable
CC=gcc
SRC_DIR=src
OBJ_DIR=obj
SRC=$(wildcard $(SRC_DIR)/*.c)
OBJ=$(SRC:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
CFLAGS += -Wall -O2 -Iinclude -Iinclude/libpatched
LDFLAGS += -Llib
LDLIBS += -lpatched
.PHONY: all clean
all: $(EXECNAME)
$(EXECNAME): $(OBJ_CC)
$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
$(RM) $(OBJ_DIR)/*.o
Этот Makefile работает правильно;Тем не менее, я искал более гибкое решение, которое не требует статически скомпилированной библиотеки перед вызовом make
. Чего я хотел бы добиться, так это иметь Makefile, который выполняет что-то вроде:
Загрузите определенную версию исходной библиотеки (чтобы никогда не было проблем с совместимостью)
Примените патч, используя patch
и файл diff (.patch
)
Скомпилируйте исправленную библиотеку (статически или динамически) для текущей платформы,используя cmake
, как того требует исходная библиотека
Скомпилируйте мой проект, используя libpatched
Являются ли эти шаги действительными по вашему мнениюили есть гораздо лучший способ справиться с этой потребностью в пропатченной библиотеке?
Если да, то, поскольку я вообще не являюсь экспертом в создании Makefiles, есть ли простой способ достичь этой цели, простоиспользуя правильно написанный Makefile?
Какой может быть лучший способ сделать это?
Заранее большое спасибо.