如何从 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 目标时,这应该 运行。
我有一个用 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 目标时,这应该 运行。