DLL/SO ビルドに特定のフラグを指定/定義することは可能ですか?
-
22-09-2019 - |
質問
DLL のみのビルドに固有のフラグを指定するにはどうすればよいですか。デフォルトでは、libtool は追加します -DDLL_EXPORT
これは、GNU 規則に従うほとんどのプロジェクトでは問題ありませんが、たとえば Boost を使用して作業する場合は、ライブラリ フラグに次の指定が必要になる場合があります。 -DDLL_EXPORT -DBOOST_ALL_DYN_LINK
DLL のみのビルドの場合、条件付きビルドが必要な場合もあるので、DLL/SO ビルド用の特定の定義が必要です。
残念ながら、libtool でこれを行う方法が見つかりません。どのようなフラグを使用すればよいでしょうか?
追記: CMake への移行を提案しようとさえしないでください。
例:
bar にリンクするライブラリ foo を使用し、動的ライブラリのみのシンボルを取得するには -DBAR_EXPORTS が必要です。
のようなものはありますか
libfoo_la_dynamic_CXXFLAGS = -DBAR_EXPORTS
誰か?
代替解決策: (かなり醜い)
ファイル「defines.h」を作成します。
#if defined(PIC) || defined(DLL_EXPORT)
#define BAR_EXPORTS
#endif
その後:
libfoo_la_CXXFLAGS += -include defines.h
醜いですが、機能するはずです。
解決
あなたがして、デフォルトで共有ライブラリを構築無効にすることができます。
LT_INIT([disable-shared])
あなたはAM_CONDITIONAL
と組み合わせる--enabled-shared
を使用して、共有ライブラリを明示的に要求された場合、余分な定義を設定することができます。 IOW、両方ではなく、同時に、静的の構築や共有ができます。
他のヒント
ないようにかなり、しかし、あなたが使用することができ、A 条件付きはDLL_EXPORTが定義されているかどうかを確認し、それはあなたが必要とする他の人を定義している場合はどうなりますか?
私はautotoolsので良いが、私はCMakeの好みではないんだということがありますが、それに対して、非常に思えます。