QTプロジェクトでライブラリを参照する最も簡単な方法は何ですか?

StackOverflow https://stackoverflow.com/questions/2870637

質問

2つのQT4 GUIアプリケーションプロジェクトと1つのQT4アプリケーションプロジェクトがあります 共有 ライブラリプロジェクトは、すべて「サブディール」テンプレートを備えた.proファイルで参照されています。だから、それは次のようなものです:

  • ExampleApp.Pro
    • app1.pro
    • app2.pro
    • sharedlib.pro

さて、私がやりたいのは、app1とapp2からsharedlibを参照して、app1.exeを実行するたびに、独自のフォルダーからapp1.exeのフォルダーに手動でsharedlib.dllをコピーする必要がないようにすることです。

プロジェクトウィンドウでパス環境変数を設定することもできますが、これはあまり携帯可能ではありません。 libs変数をapp1.proファイルに置くことを検討しましたが、それが静的にリンクされたライブラリのみを指すかどうかはわかりません - さまざまな構文で試しましたが、共有Libsで動作しないようです。 。

役に立ちましたか?

解決

次のようにプロジェクトを整理できます。

  • Project1
    • 置き場
    • lib
    • App1
      • app2.pro
    • App2
      • app2.pro
    • Sharedlib
      • sharedlib.pro

Sharedlib.proでは、次のようなものを追加できます。

TEMPLATE = lib
TARGET = sharedlibr
QT + = core \
      gui
DESTDIR = .. / lib

Destdir:コンピレーションの結果が場所「.. / lib」にコピーされることを保証します

アプリケーションについては、app1およびapp2:

TEMPLATE = app
TARGET = app1
QT + = core \
      gui
DESTDIR = .. / bin

これは、インストーラーを作成する場合にのみ開発のために、ライブラリと実行可能ファイルがオペレーティングシステムに応じて適切な監督に配置されます。

他のヒント

これに追加するために(少し遅れて!)、使用できます QMAKE_POST_LINK ビルドが完了した後にファイルをコピーする。例:

defineReplace(formatpath) {
    path = $$1

    win32 {
        return(\"$$replace(path, "/", "\\")\")
    } else:unix {
        return($$replace(path, " ", "\\ "))
    } else {
        error("Unknown platform in formatpath!")
    }
}

win32:COPY_CMD = copy
unix:COPY_CMD = cp -P
macx:COPY_CMD = cp -R

win32:CMD_SEP = $$escape_expand(\n\t)
unix:CMD_SEP = ";"

win32:LIB_EXT = dll
unix:LIB_EXT = so*
macx:LIB_EXT = dylib

# Put here the directory of your library's build dir, relative to the current directory
# A path is given for example...
MYLIB_BUILD_DIR = $$_PRO_FILE_PWD_/../lib/bin

QMAKE_POST_LINK += $$COPY_CMD $$formatpath($$MYLIB_BUILD_DIR/*.$$LIB_EXT) $$formatpath($$OUT_PWD/$$DESTDIR) $$CMD_SEP
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top