共有ライブラリを使用した機能の具体的な組み込みについて質問があります。私は自分の小さなインコードプロファイラーを持っています。これは複数のプロジェクトで使用しているため、通常は共有ライブラリとして含まれています。もともと私はコンパイル時フラグを使用してプロファイリングコードをオフにしたかったのです。例えば:
#ifdef PROFILEAPP
class Profiler {
static void start() { ... }
static void stop() { ... }
};
#else
class Profiler {
static void start(){}
static void stop(){}
};
ただし、シンボルを定義せずにlibを事前にコンパイルした場合、これは機能しません。私のライブラリはヘッダーだけではないことに注意してください。
そのため、cmakeコマンドを使用して2つの異なるターゲットをコンパイルできることがわかりました。
set_property( TARGET my_lib PROPERTY COMPILE_DEFINITIONS "PROFILEAPP")
これは機能しますが、2つの異なる.soファイルに対処するために、クライアントアプリケーションのリンクオプションを変更する必要があります。しかし、これが進むべき道かどうか疑問に思いますか?Boostのようなライブラリは、マシンの違いに関して同様のことをしますか?クライアントアプリケーションでPROFILEAPPを定義するだけで同じことができる方法はありますか?