2016-10-19 17 views
1

私はサブフォルダテンプレートを持つqtcreatorプロジェクトを持っています。qmakeサブフォルダテンプレートでビルドした後に最初のプロジェクトをインストールするには?

mainProject/ 
    mainProject.pro 
    staticLib/ 
     (bunch of .cpp and .h files) 
     staticLib.pro 
    testApp/ 
     main.cpp 
     testApp.pro 

そしてmainProject.proファイル:フォルダは次のようになり、私はstaticLib.proファイルでインストールオプションを追加しましたので、

TEMPLATE = subdirs 
CONFIG += ordered 

SUBDIRS = staticLib \ 
      testApp 

testApp.depends = staticLib 

私は静的ライブラリをインストールしたいです

headersDataFiles.path = $$LIBPATH/include 
headersDataFiles.files = $$PWD/*.h 
INSTALLS += headersDataFiles 

libraryFiles.path = $$LIBPATH/lib 
Debug:libraryFiles.files = $$OUT_PWD/debug/*.a 
Release:libraryFiles.files = $$OUT_PWD/release/*.a 
INSTALLS += libraryFiles 

問題は、Qtcreatorでプロジェクトをビルドするときに、まず静的なlibを作成し、次にmake installを実行しないでアプリケーションをビルドするので、アプリケーションのビルドに失敗します。そしてQtcreatorは、qmake_all(最初にlibをインストールしないで両方のプロジェクトをビルド)の後にビルドステップを追加することしかできません。

私はstaticLibプロジェクトをビルドし、それをインストールしてからtestAppをビルドする方法はありますか?

EDIT:testAppプロジェクトは、常に最初のプロジェクトの出力ディレクトリからライブラリにリンクできます。しかし、プロジェクトを整理しておくために、.aファイルとヘッダーファイルを別のフォルダに移動したいと思います。 testAppのビルドの失敗は問題ではありません。誤解をおかけして申し訳ありません。

+0

依存関係で静的ライブラリを使用して何かをコンパイルするには、インストールは必要ありません。 testApp.proの設定が間違っているように見えます - あなたも共有していただけますか? Qt Creator経由で静的なlibをtestAppに追加しようとしましたか? –

+0

はい、正しくインストールされています。実際には、私がやりたいことをシステムにインストールするのではなく、生成された.aとヘッダーをプロジェクトの他のフォルダに移動してプロジェクトを整理しておくだけです。ご意見ありがとうございました、ご迷惑をおかけして申し訳ありません、私は質問を編集しました。 –

答えて

1

私はQt作成者のステップを追加するという考え方が嫌いです(もちろん唯一の方法ではありません)。異なる開発環境AFAIKで永続的ではないためです。たとえば、別のマシンのリポジトリからコードをダウンロード/クローンするたびに、このステップをQt Creatorに追加する必要があります。

我々は(ただし、それはまた、他のプラットフォームで動作するはずです)は、Windows上でそれをやった方法は、(qmakeのクロスプラットフォームのコピーコマンドを事前定義する)QMAKE_POST_LINKと$$ QMAKE_COPY経由です:

FILES_TO_COPY = $$DESTDIR/staticLib.a <path to your header1> <path to your header2> 

またはあなたが好む場合:

FILES_TO_COPY = $$DESTDIR/staticLib.a 
FILES_TO_COPY += <path to your header1> 
FILES_TO_COPY += <path to your header2> 

あなたは、ヘッダーに完全なパスをハードコーディングしないように、$$ PWDのようなVARSを使用することができ、その後、

DESTINATION_DIR = $$shell_quote($$shell_path("/put/it/here/")) 
for (FILE, FILES_TO_COPY) 
{ 
    FILE_PATH = $$shell_quote($$shell_path($$FILE)) 
    QMAKE_POST_LINK += $$QMAKE_COPY $$FILE_PATH $$DESTINATION_DIR $$escape_expand(\\n) 
} 

UPD:必要なヘッダーがすべて1つのディレクトリにある場合は、QMAKE_COPYの代わりにQMAKE_COPY_DIRを使用できます。

また、特定のプラットフォームでビルドする予定がある場合は、$$ shel_quote/$$ shell_pathを省略して正しいパスを書き込むことができます。

関連する問題