我有一个用Qt / C ++编写的跨平台项目,这个项目使用一个用Go编写的静态库作为依赖项。 Go项目使用GNU Make生成两个文件(.a
和.h
)。
我正在尝试自动化我使用qmake
生成Makefile
的构建,然后将此Makefile的默认目标调用为简单$ make
。
现在我的构建首先明确地执行git clone go-subproject && cd go-subproject && make
,然后它复制结果库和头文件,然后只调用git clone qt-project && qmake && make
(注意那些不是确切的命令,这些只是对什么的简化解释我现在正在做。)
我可以将子项目包含为git module
,以便在执行git clone qt-project
时自动获取子项目的最新代码。
要使其工作如何指示.pro
文件生成首先构建子项目的Makefile?
更新
似乎问题的结构不明确。以下是结构外观的一些可视化:
/
|
+- .git/
|
+- qt-project.pro
|
+- go-project/
| |
| +- .git/
| |
| +- Makefile
因此,在上述结构中,我想用$ qmake && make
我需要在qt-project.pro
中使用哪些代码来执行此操作?
答案 0 :(得分:3)
在寻找正确的答案后,我自己找到了解决方案。可以使用QMAKE_EXTRA_TARGETS
和PRE_TARGETDEPS
变量以及定义自定义目标来完成此操作。比如上面描述的项目:
在我的.pro
文件中:
# Build sub project
subproject.target = subproject
subproject.commands = cd $$PWD/go-project/ && \
make
QMAKE_EXTRA_TARGETS += subproject
PRE_TARGETDEPS += subproject
QMAKE_EXTRA_TARGETS
将使用指定命令将附加目标添加到生成的Makefile中,PRE_TARGETDEPS
将此目标添加为整个项目的依赖项。
答案 1 :(得分:0)
如果子项目是Qmake可以构建它的普通C / C ++项目,你可以为子项目创建一个pri文件并将其包含在你的主项目中,但你用Go和我写的子项目不确定它是否可以通过Qmake建立或不建立。
但您可以使用QMAKE变量,例如QMAKE_PRE_LINK。你必须创建一个bash脚本,它转到子项目源目录,配置它并制作它。现在,您可以在开始链接之前使用QMAKE_PRE_LINK指示此变量指向的qmake run命令。
将其放入您的专业档案
QMAKE_PRE_LINK = $$ PWD / buildSubproject.sh