首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QMake/Make子项目更改时重新生成

QMake/Make子项目更改时重新生成
EN

Stack Overflow用户
提问于 2020-01-27 17:53:48
回答 1查看 65关注 0票数 0

我目前正在尝试将第三方库集成到我的qmake构建过程中。我添加了第三方库repo作为子模块。此存储库的结构为:

代码语言:javascript
运行
复制
├── ComBase
│   │   main.c
│   ├── lib
│   │   ├── libCom.a
│   │   └── libCom.so
│   ├── Makefile
├── _Linux
└── Makefile

有多个像ComBase这样的子目录,它们都创建了自己的库。toplevel Makefile如下所示:

代码语言:javascript
运行
复制
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文件看起来像这样:

代码语言:javascript
运行
复制
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库(thirdparty/comlib/ComBase/Makefile)的重建。

EN

Stack Overflow用户

发布于 2020-01-27 21:29:28

这个问题的解决方案是添加$(子项目)作为.PHONY目标。另请调整此行:

代码语言:javascript
运行
复制
PRE_TARGETDEPS += comlib
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59928673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档