如何从 Qt .pro 项目文件调用外部 Makefile

How to call an external Makefile from a Qt .pro project file

我有一个用 QtCreator 构建的项目。 一个 myapp 和一个 staticlib mylib。 两者都在 SUBDIRS 模板项目中处理。

TEMPLATE  = subdirs
SUBDIRS = \
        mylib \
        myapp

CONFIG += ordered
CONFIG += qt

 myapp.depends = mylib

myapp 也链接到 mylib2,一个在 Qt 框架之外单独构建的静态库。

所以,在 myapp.pro 的某处,我:

# Paths to PGA libs and contrib
INCLUDEPATH += ./include
INCLUDEPATH += $$PWD/../mylib2/include
...
unix {
    LIBS += "-L$$PWD/../mylib2/lib/" -lmylib2$${DBG}  # DBG=d if debug mode
...
}

那样的话,一切正常。我很高兴。 但是为了让它工作,我需要确保自己在构建 myapp.

时已经构建了 mylib2

我希望实现的是在需要构建时调用 mylib2 的 makefile。即 make -C /path/to/mylib2 -f mylib2.mak

我需要在 .pro 文件中添加什么? 它与自定义目标有关吗? 但是如何使用 qmake 目标自动构建自定义目标?

Z.

可能是我理解错了,myapp是依赖mylib的,但是你先build了myapp。您强制 Qt 按顺序构建它,但您首先拥有 myapp。

首先尝试构建 mylib。

CONFIG += ordered
SUBDIRS = \
    mylib \  # must be first
    myapp

编辑:我在我的项目中这样编译libraw

这可以像 libraw.pri 一样放在单独的文件中,您可以将它添加到应用程序项目中。

评论:此解决方案需要您未使用的库。它不会在 mylib2 文件夹中的任何文件发生更改时重建。它将建立在 qmake 运行 之上。不是在构建您的应用程序项目或 mylib 时。

# Build libraw
!exists( $$librawdir/bin/libraw.dll ) {
    system( cd $$librawdir && vcvarsall.bat amd64 && nmake Makefile.msvc )
}

所以你的版本可以是这样的: 文件名mylib2.pri

!exist ( /path/to/mylib2/bin/mylib2.dll ) { 
    system ( make -C /path/to/mylib2 -f mylib2.mak )
}

然后在您的应用程序 pro 文件中,您应该添加此文件,如

include(mylib2.pri)

或者你可以在 mylib 项目中这样添加 QMAKE_POST_TARGET myapp 项目之前 运行

        QMAKE_POST_LINK += make -C /path/to/mylib2 -f mylib2.mak &

每次构建 mylib 目标时,这应该 运行。