QMake /使子项目在更改时重建

问题描述 投票:0回答:1

我目前正在尝试将第三方库集成到我的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

[我想要实现的是,如果在ComBase库的main.c文件中发生任何更改,则qmake进程会注意到它,并在构建/链接实际的qt项目之前重新构建该库。我注意到的第一个问题是,当我修改main.c并直接在第三方子模块(thirdparty / comlib / Makefile)中调用Makefile时,它不会触发ComBase lib(thirdparty / comlib / ComBase / Makefile)的重建。

makefile qmake
1个回答
0
投票

解决方案是将$(SUBPROJECTS)添加为.PHONY目标。还要对此行进行调整:

PRE_TARGETDEPS += comlib
© www.soinside.com 2019 - 2024. All rights reserved.