ときTEMPLATE = libがターゲットにシンボリックリンクを作成しないようにqmakeのを強制するには?

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

  •  21-08-2019
  •  | 
  •  

質問

私はこのような(部分)qmakeのプロジェクトファイルを持っています:

TEMPLATE=lib
TARGET=whatever
SOURCES=whatever.cpp
HEADERS=whatever.h

この意志 - 少なくとも、デフォルトでは - このようなライブラリといくつかのシンボリックリンクを作成します:

libwhatever.so -> libwhatever.so.0.1.0
libwhatever.so.0 -> libwhatever.so.0.1.0
libwhatever.so.0.1 -> libwhatever.so.0.1.0
libwhatever.so.0.1.0

libwhatever.so.0.1.0は、それらの残りの部分は単なるシンボリックリンクです、実際のライブラリのバイナリです。

私は何を達成したいことは何シンボリックリンクがlibwhatever.soは、実際のバイナリと休息になるように、他の方法で回避することが何の全部または順序で作成されていないということですが、シンボリックリンクです。

役に立ちましたか?

解決

あなたはノーオペレーションとQMAKE_LN_SHLIB変数をオーバーライドする場合は、シンボリックリンクをすることはありません。

QMAKE_LN_SHLIB       = :

他のヒント

私が提案swarfratにより投稿しようとしましたが、それは動作しますが、それは(かなり役に立つ)メッセージとエラーを出力します:

Error 1 (ignored)

だから、ここすべてのエラーを発生させることなく、シンボリックリンクを削除する別の方法があります:

unix: QMAKE_POST_LINK = find $$DESTDIR -maxdepth 1 -type l -exec rm -f {} \;

このqmakeの変数の詳細については、<のhref = "http://qt-project.org/doc/qt-4.8/qmake-variable-reference.html#qmake-post-link" のrel =」見つけることができますnofollowを」タイトル= "QMAKE_POST_LINK">ここを。

あなたがプロファイルに以下を追加することができます:

CONFIG += unversioned_libname unversioned_soname

私は成功するテストしています。

私はqmakeの源とmkspecsを学んだが、シンボリックリンクの生成はかなりハードワイヤードであると思われます。

私はソースに見つけたものから、あなたがCONFIGにpluginを追加した場合、唯一のライブラリがシンボリックリンクせずに、生成されるであろうと思われます。

そうすることが、他の副作用を持っている場合は、

でも、私はあなたを伝えることはできません。しかし、ビルド後に実行するスクリプトを記述することなく、シンボリックリンクを取り除くための唯一の方法であるように思われる。

あなたは私たちにいくつかのヒントを与えた場合、それはのように、それが重要な理由に役立つかもしれない...

どのようとして、あなたは、ビルドプロセスの最後に実行され、あなたの好みに合わせて物事を再配置するスクリプトを考えるかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top