2017-11-14 10 views
3

私はQtアプリケーションを持っています。ファイルは.proTEMPLATE = appです。プロジェクトのサブフォルダの1つは、別のQtプロジェクトのgit-submoduleです。ライブラリのコレクションは、.proというファイルにTEMPLATE = subdirsというファイルがあります。スタンドアロンのプロジェクトがうまくコンパイルし.libファイルを生成して他のQtプロジェクトのgit-submoduleとしてのQtプロジェクト

project/ 
    app.pro (TEMPLATE = app) 
    stuff/ 
    libs/ <-- git-submodule 
     libs.pro (TEMPLATE = subdirs) 
     lib1/ 
      lib1.pro (TEMPLATE = lib) 
     lib2/ 
      lib2.pro (TEMPLATE = lib) 

libs

グラフィカルにそれは次のようになります。 しかし、app.proTEMPLATEはではありませんが、この場合、サブディレクトリとしてprojectに何とかlibs.proを含める必要があります。たぶん、SUBDIRS += askelibのようなものをapp.proに書くという私の試みは何の効果もありませんでした。 私の目的は、app.proというビルドフォルダ内のファイル.libを取得することです。 libsは私の目標を達成するためにlibsプロジェクト内で何も変更する必要がないので、git-submoduleだと強調します。

私がapp.proTEMPLATEからsubdirsに変更するとうまくいくはずです。私をclerifyするに :

subdirs_proj/ 
    app/ 
    libs/ 

代わりの

app/ 
    libs/ 

EDIT:プロジェクト階層は、別のネストレベルを達成するため、それは物事がより困難になりますので、しかし、それは私が本当にやりたいことはありません理由:

私の目的は、プロジェクトツリーをできるだけ明確にすることです。 githubからプロジェクトを複製する場合は、そのディレクトリに入り、最上位にapp.proと表示されます。そして、すべてが明確で、簡単で美しいです。そしてあなたが奇妙なsubdirs.proの上部に表示されているのと同じではありませんが、実際のプロジェクトはappサブディレクトリにあります。また、サブアプリケーションのサブフォルダをライブラリサブフォルダと混同する可能性もあります。その名前がapplibsなどのようにはっきりしない場合はtorpedoおよびhelios。私の考えがはっきりしていることを祈っています:)

+0

これについてサンプルレポを取得することは可能ですか? –

+0

@TarunLalwaniはい、確かに、[this one](https://github.com/AskePit/Memory)です。ここでは、 'subdirs'、ライブラリディレクトリ、' src'ディレクトリの先頭に 'Memory.pro'があります。以前はライブラリを使う前に 'src'ディレクトリには必要がなく、' Memory.pro'は実際のアプリケーションの 'pro'ファイルでした。どちらがより便利だったか –

+0

ここで環境変数を使うのはどうですか?環境変数を使用して 'TEMPLATE = $$(TEMPLATE_ENV)'のような値を取得し、それが[空]の場合(https://stackoverflow.com/questions/13803893/test-if-a-variable-is) -empty-and-give-default-value-of-qmake)には、デフォルト値を割り当てることができます。次に、メインプロジェクトのビルド中にその環境変数をエクスポートし、参照ライブラリプロジェクトの値を上書きできるようにしますか?私はqmakeの専門家ではないので、いくつかの仮定は間違っているかもしれませんが、これが意味をなさないかどうかを見ることができます –

答えて

7

あなたはすでに答えを持っています:トップレベルプロジェクトをサブディレクトリプロジェクトにしてください。

私はあなたがなぜそれを避けたいのか、それがなぜ混乱しているのか理解できません。 IMHO、サブディレクトリを持つappプロジェクトを持つと、サブディレクトリを持つsubdirプロジェクトを持つよりも混乱します。

私は、フォルダレベルを削除すると、アプリケーション内にサブディレクトリがあることを補うとは思わない.proTEMPLATE=app彼はあなたが1つのプロジェクトだけを構築すると見なしていると見ても、プロジェクトに参加している新しい開発者を考えてみましょう。つまり、あなたのプロジェクトは「はっきりしていて、簡単で美しい」というわけではなく、少なくとも驚きの原則に完全に違反しているということです。

私は定期的に次のようなアーキテクチャを持つプロジェクトを持っている:

project-a/project-a.pro (subdirs) 
     /cli-app/cli-app.pro (app) 
     /gui-app/gui-app.pro (app) 
     /core-lib/core-lib.pro (lib) 
     /3rd-party/3rd-party.pro (subdirs) 
     /3rd-party/somelib/somelib.pro (lib) 

私はフォルダレベルを削除するには、プロジェクトの種類をいじりよりもそれが明確にわかります。そして、開発者が各サブフォルダが何であるかを知りたくないのであれば、何が何であるかを説明するREADMEファイルを投げてください。

また、Qtプロジェクト自体を見ることができます。それには多くの.proファイルがあり、サブディレクトリを含むアプリケーションプロジェクトを持っているわけではありません。そして、私はそれが特に大きなプロジェクトのためにはっきりしていると思います。

関連する問題