gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:37:07 25 4
gpt4 key购买 nike

我有一个链接到许多共享库的项目。

假设项目 A 依赖于项目 B 和 C

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

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

有谁知道我如何在项目文件中明确表达此类依赖关系?

最佳答案

在对 qmake 感到相当沮丧之后,我找到了我认为是你问题的答案。如果没有,那么我已经学会了使用 qmake 的方法,直到找到更好的东西,因为这仍然有点难看。我建立了一个演示项目,这是我的目录结构(文件有扩展名,文件夹没有):

MyProj
MyProj.pro
myproj-core
myproj-core.pro
globals.h
MyProjCore.h
MyProjCore.cpp
myproj-app
myproj-app.pro
main.cpp

我们从 MyProj.pro 作为一个 subdirs 项目开始,这是执行您要求的操作的关键。基本上,您只需将其设置在一个 qmake 文件上,而不是依赖其他项目来指定调试/发布和各种其他垃圾。它不能让你只生产你需要的东西,但这是我能想到的最好的解决方案。内容如下:

TEMPLATE = subdirs
# Needed to ensure that things are built right, which you have to do yourself :(
CONFIG += ordered

# All the projects in your application are sub-projects of your solution
SUBDIRS = myproj-core \
myproj-app

# Use .depends to specify that a project depends on another.
myproj-app.depends = myproj-core

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

QT -= gui
TARGET = myproj-core
TEMPLATE = lib
DEFINES += MYPROJCORE_LIBRARY
SOURCES += MyProjCore.cpp
HEADERS += MyProjCore.h \
globals.h

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

QT       -= gui

TARGET = myproj-app
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

# Specify that we're lookin in myproj-core. Realistically, this should be put
# in some configuration file
INCLUDEPATH += ../myproj-core
# Link to the library generated by the project. Could use variables or
# something here to make it more bulletproof
LIBS += ../myproj-core/libmyproj-core.so
# Specify that we depend on the library (which, logically would be implicit from
# the fact that we are linking to it)
PRE_TARGETDEPS += ../myproj-core/libmyproj-core.so

SOURCES += main.cpp

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

编辑:我专门制作了一个文件,用于为我构建依赖项,我将其存储在每个项目的同级文件夹中(上面指定的目录结构中 MyProj 的子级),名为 dependency.pri:

# On windows, a shared object is a .dll
win32: SONAME=dll
else: SONAME=so

# This function sets up the dependencies for libraries that are built with
# this project. Specify the libraries you need to depend on in the variable
# DEPENDENCY_LIBRARIES and this will add
for(dep, DEPENDENCY_LIBRARIES) {
#message($$TARGET depends on $$dep ($${DESTDIR}/$${dep}.$${SONAME}))
LIBS += $${DESTDIR}/lib$${dep}.$${SONAME}
PRE_TARGETDEPS += $${DESTDIR}/lib$${dep}.$${SONAME}
}

因此,在所有使用应用程序的底部,我可以添加以下行:

DEPENDENCY_LIBRARIES = myproj-core

include(../config/dependencies.pri)

这假设您将库复制到某个共享位置和/或根据需要移动它们,因此我的函数可能不适合您,但我想我会将其添加到解决方案中。

关于qt - Qmake项目依赖(链接库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2288292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com