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
基本的に、他のプロジェクトに依存してデバッグ/リリースやその他のあらゆる種類のジャンクを指定するのではなく、1 つの 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
私はそれが私のものを解決したことを知っているので、これがあなたの問題を解決することを願っています!
EDIT:依存関係を構築するための特別なファイルを作成し、各プロジェクトの兄弟フォルダー(上記で指定したディレクトリ構造の MyProj の子)に保存しますdependencies.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)
これは、ライブラリを共有の場所にコピーしたり、必要に応じて移動したりすることを前提としているため、私の機能が機能しない可能性がありますが、ソリューションに追加することにしました。