QMake / Сделать пересоздание подпроекта при изменении - PullRequest
0 голосов
/ 27 января 2020

В настоящее время я пытаюсь интегрировать стороннюю библиотеку в процесс сборки 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).

1 Ответ

0 голосов
/ 27 января 2020

Решением для этого было добавление $ (SUBPROJECTS) в качестве цели .PHONY. Также настройка этой строки:

PRE_TARGETDEPS += comlib
...