В настоящее время я пытаюсь интегрировать стороннюю библиотеку в процесс сборки qmake. Я добавил стороннюю библиотеку репо в качестве подмодуля. Структура этого репозитория:
├── ComBase
│ │ main.c
│ ├── lib
│ │ ├── libCom.a
│ │ └── libCom.so
│ ├── Makefile
├── _Linux
└── Makefile
Существует несколько подкаталогов, таких как ComBase, которые создают собственную библиотеку. Makefile верхнего уровня выглядит следующим образом:
MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
MKFILE_DIR := $(dir $(MKFILE_PATH))
SUBPROJECTS = $(MKFILE_DIR)/ComBase \
$(MKFILE_DIR)/OtherLib
TARGET_DIR=$(MKFILE_DIR)/_Linux
#Build rules begin.
all: $(SUBPROJECTS)
$(SUBPROJECTS):
$(MAKE) -C $@ -f Makefile
cp $@/lib/* $(TARGET_DIR)
clean:
rm -f $(TARGET_DIR)/*
$(foreach subproj,$(SUBPROJECTS), $(MAKE) -C $(subproj) -f Makefile clean;)
.PHONY: clean all
А мой основной файл qt qmake выглядит так:
comlib.target = comlib
comlib.commands = make -f $${OUT_PWD}/../../thirdparty/comlib/Makefile
QMAKE_EXTRA_TARGETS += comlib
LIBS += -L$${OUT_PWD}/../../thirdparty/comlib/_Linux -lCom
PRE_TARGETDEPS += $${OUT_PWD}/../../thirdparty/comlib/_Linux/libCom.so
Что я хочу достичь, так это если что-то изменится, скажем в main.c
В файле библиотеки ComBase процесс qmake замечает это и перестраивает библиотеку перед сборкой / связыванием фактического проекта qt. Первая проблема, которую я заметил, что когда я изменяю main.c
и вызываю Makefile непосредственно в подмодуле третьего лица (thirdparty / comlib / Makefile) напрямую, это не вызывает перестроение библиотеки ComBase (thirdparty / comlib / ComBase / Makefile).