プラグインのカスタムアセンブリ-私たちは反対に行きます

みなさんこんにちは!



プラグインがそれ自体を選択する方法に関する小さな(まあ、非常に小さな)メモ-このシステムにアセンブルするかどうか。 もちろん、古くからある方法があります。たとえば、次のように、アセンブリ自体から余分なプラグインを除外するだけです。



# plugins.pro TEMPLATE=subdirs SUBDIRS+=common macx: SUBDIRS+=macplugin win32: SUBDIRS+=winplugin
      
      





しかし、このアプローチでは、新しいプラグインを追加するたびに、plugins.proに登録し、構築するシステムを確立する必要があります。 プラグインが5つしかなく、もはや予期されない場合、これは正常です。 ただし、すでに20個のプラグインがあり、さらに30個のプラグインが計画されており、それらの多くが一部のプラットフォームでのみ組み立てられる場合、plugins.proはゴミになります。 複数の開発者がいる場合、これによりさらに混乱が生じます。



プラグインがどのシステムを構築するのかという懸念を、開発者の脆弱な肩に移すことは、より論理的ではありませんか? その後、plugins.proファイルは非常にシンプルで簡単になります。



 # plugins.pro TEMPLATE=subdirs SUBDIRS+=common SUBDIRS+=macplugin SUBDIRS+=winplugin
      
      





しかし、その後、macplugin.proで次のように記述する必要があります(winplugin.proでも同じです)。



 # macplugin.pro macx: { # project configuration here } else { include(../nobuild.inc) }
      
      





ご覧のとおり、今は小さなものです。プラグインのソースコードを含むフォルダーのルートにファイルnobuild.incを作成し、プラグインのビルドをキャンセルするように何かを書き込みます。 最初は空のままにしておく方が良いように見えますが、これはプラグインによる収集の試みにつながります-空の.proファイルのQtはデフォルトのパラメーターでフォルダー内のすべてのソースを収集しようとするためです。 そのため、プラグインのソースを実行可能ファイルにコンパイルし、さらにこのOS向けではないソースをコンパイルしようとします。 もちろん、この場合、トピックの冒頭の図に似たものが表示される可能性が高くなります。



qmakeのドキュメントを破り、プロジェクトのビルドをスキップする単一の関数を見つけられなかったので、コンパイラとリンカーを交換するという汚いハックをしなければなりませんでした! 何のために? さて、どのようなプログラムがすべてのシステムにあり、破壊的なことは何もせず、引数を取り、常に0を返しますか?



一般的に、次のように書きます。



 # nobuild.inc QMAKE_CXX=echo QMAKE_LINK=echo win32: { CONFIG-=embed_manifest_exe CONFIG-=embed_manifest_dll TARGET= }
      
      





qmakeが未組み立てのバイナリにマニフェストを挿入しようとしないように、Windowsブロックが必要です。



「結論」またはそのようなもの。

このメソッドは汚れており、明らかな松葉杖ですが、動作します。 それから-松葉杖のないどんなプログラム? =)



しかし、親愛なるhabralumの人々が問題を解決するための別の、より適切な方法を提案するなら、私はただうれしいです。



All Articles