我目前正在尝试将第三方库集成到我的 qmake 构建过程中。我将第三方库 repo 添加为子模块。这个存储库的结构是:
├── 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.cComBase 库的文件中有任何更改,qmake 进程会注意到它并在构建/链接实际的 qt 项目到它之前重建库。我注意到的第一个问题是,当我修改main.c并直接调用第三方子模块(thirdparty/comlib/Makefile)中的 Makefile 时,它不会触发 ComBase lib(thirdparty/comlib/ComBase/Makefile)的重建。