简体   繁体   English

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

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

I've a project built with QtCreator. 我有一个使用QtCreator构建的项目。 A myapp and a staticlib mylib. 一个myapp和一个staticlib mylib。 Both are handled within a SUBDIRS template project. 两者都在SUBDIRS模板项目中处理。

TEMPLATE  = subdirs
SUBDIRS = \
        mylib \
        myapp

CONFIG += ordered
CONFIG += qt

 myapp.depends = mylib

myapp is also linked against mylib2 , a static-lib built separately outsideof Qt framework. myapp还与mylib2链接, mylib2是在Qt框架之外单独构建的静态库。

So, somewhere in myapp.pro I've: 因此,在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
...
}

That way, everything works fine. 这样,一切正常。 I'm happy. 我很高兴。 But to get it working, I need top ensure myself that mylib2 is already built when I build myapp . 但是要使其正常运行,我需要首先确保自己在构建myapp时已经构建了mylib2

What I wish to achieve, is to make a call to the makefile oy mylib2 when it needs to built. 我希望实现的是在需要构建时对myfile2的makefile进行调用。 ie make -C /path/to/mylib2 -f mylib2.mak 即使make -C /path/to/mylib2 -f mylib2.mak

What should I need to add in my .pro file ? 我需要在.pro文件中添加什么? Is it related with custom targets ? 它与自定义目标有关吗? But how to make a custom target automatically built with the qmake target ? 但是,如何使使用qmake目标自动构建的自定义目标呢?

Z. Z.

Maybe I misunderstand it, but myapp is dependent on mylib, but you are building myapp first. 也许我误会了它,但是myapp依赖于mylib,但是您首先要构建myapp。 You forced Qt to build it ordered, but you have myapp at first place. 您强迫Qt按顺序构建它,但首先使用了myapp。

Try to build mylib first. 尝试先构建mylib。

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

Edit: I am compiling libraw in my project like this 编辑:我正在像这样在我的项目中编译libraw

This can be in separate file like libraw.pri and you can add it to app project. 这可以在单独的文件中,例如libraw.pri,您可以将其添加到应用程序项目中。

Comment : This solution expecting library you are not working on. 评论 :此解决方案需要您不使用的库。 It wont rebuild upon changes of any file in mylib2 folder. 它不会根据mylib2文件夹中任何文件的更改而重建。 It will be build upon qmake run. 它将基于qmake运行。 Not when building your app project or mylib. 构建应用程序项目或mylib时不行。

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

So you version can look like: File name mylib2.pri 因此,您的版本可能类似于:文件名mylib2.pri

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

Then in your application pro file you should add this file like 然后在您的应用程序专业文件中,您应该像这样添加该文件

include(mylib2.pri)

Or you can add QMAKE_POST_TARGET like this in mylib project which is run before myapp project. 或者,您可以在mylib项目中添加像这样的QMAKE_POST_TARGET,该项目在myapp项目之前运行。

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

This should run make every time mylib target is build. 每当构建mylib目标时,都应运行make。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM