qt – Qmake项目依赖项(链接库)

前端之家收集整理的这篇文章主要介绍了qt – Qmake项目依赖项(链接库)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个项目,链接到一些共享库。

假设项目A取决于项目B和C.

理想情况下,我想在我的项目文件中强加以下依赖项:

>重建项目A,如果自上次构建项目A以来B或C已重建
>使用相关配置的输出(即如果在调试模式下构建项目A,则使用项目B和C的lib的调试版本)

有人知道我可以明确地表示这种依赖项在我的项目文件吗?

经过相当多的挫折qmake,我发现我认为是你的问题的答案。如果没有,那么我学会了如何使用qmake,直到我找到更好的东西,因为这仍然有点丑。我设置了一个demo项目,这是我的目录结构(文件有扩展名,文件夹不):
  1. MyProj
  2. MyProj.pro
  3. myproj-core
  4. myproj-core.pro
  5. globals.h
  6. MyProjCore.h
  7. MyProjCore.cpp
  8. myproj-app
  9. myproj-app.pro
  10. main.cpp

我们从MyProj.pro开始作为subdirs项目,这是做你要求的关键。基本上,而不是依赖于其他项目来指定调试/版本和各种其他垃圾,你只需将其设置在一个qmake文件。它不让你做你所需要的,但它是我可以想出的最好的解决方案。这里是内容

  1. TEMPLATE = subdirs
  2. # Needed to ensure that things are built right,which you have to do yourself :(
  3. CONFIG += ordered
  4.  
  5. # All the projects in your application are sub-projects of your solution
  6. SUBDIRS = myproj-core \
  7. myproj-app
  8.  
  9. # Use .depends to specify that a project depends on another.
  10. myproj-app.depends = myproj-core

myproj-core.pro是你典型的共享对象库:

  1. QT -= gui
  2. TARGET = myproj-core
  3. TEMPLATE = lib
  4. DEFINES += MYPROJCORE_LIBRARY
  5. SOURCES += MyProjCore.cpp
  6. HEADERS += MyProjCore.h \
  7. globals.h

myproj-app.pro是消费者应用程序,其中小的重建需要的技巧是:

  1. QT -= gui
  2.  
  3. TARGET = myproj-app
  4. CONFIG += console
  5. CONFIG -= app_bundle
  6.  
  7. TEMPLATE = app
  8.  
  9. # Specify that we're lookin in myproj-core. Realistically,this should be put
  10. # in some configuration file
  11. INCLUDEPATH += ../myproj-core
  12. # Link to the library generated by the project. Could use variables or
  13. # something here to make it more bulletproof
  14. LIBS += ../myproj-core/libmyproj-core.so
  15. # Specify that we depend on the library (which,logically would be implicit from
  16. # the fact that we are linking to it)
  17. PRE_TARGETDEPS += ../myproj-core/libmyproj-core.so
  18.  
  19. SOURCES += main.cpp

我希望这解决了你的问题,因为我知道它解决了我的!

编辑:我做了一个专门为我构建依赖项的文件,我将它存储在我的每个项目(在上面指定的目录结构中的MyProj的子项)的兄弟文件夹中称为dependencies.pri:

  1. # On windows,a shared object is a .dll
  2. win32: SONAME=dll
  3. else: SONAME=so
  4.  
  5. # This function sets up the dependencies for libraries that are built with
  6. # this project. Specify the libraries you need to depend on in the variable
  7. # DEPENDENCY_LIBRARIES and this will add
  8. for(dep,DEPENDENCY_LIBRARIES) {
  9. #message($$TARGET depends on $$dep ($${DESTDIR}/$${dep}.$${SONAME}))
  10. LIBS += $${DESTDIR}/lib$${dep}.$${SONAME}
  11. PRE_TARGETDEPS += $${DESTDIR}/lib$${dep}.$${SONAME}
  12. }

所以在所有消费应用程序的底部,我可以添加行:

  1. DEPENDENCY_LIBRARIES = myproj-core
  2.  
  3. include(../config/dependencies.pri)

这假设你正在将库复制到一些共享位置和/或根据需要移动它们,所以我的功能可能不适合你,但我想我会把它添加解决方案。

猜你在找的设计模式相关文章