CMakeでは、すべての実行ファイルがライブラリにリンクするように指定する方法はありますか?基本的には、すべての実行ファイルがtcmallocとprofilerにリンクされています。単純に-ltcmallocを指定すると、-lprofilerは良い解決策ではありません。私は、CMakeがライブラリへのパスを移植可能な方法で見つけさせるためです。CMakeでは、すべての実行ファイルを指定します。target_link_libraries特定のライブラリ
4
A
答えて
10
あなたは常に必要リンクの依存関係を追加して、あなた自身の持つ内蔵のadd_executable
機能無効にすることができます:それは動作しますが、種類のハック
macro (add_executable _name)
# invoke built-in add_executable
_add_executable(${ARGV})
if (TARGET ${_name})
target_link_libraries(${_name} tcmalloc profiler)
endif()
endmacro()
1
あなたのために仕事をするCMakeに関数/マクロを書くことができます。
function(setup name sources
add_executable(name sources)
target_link_library(name tcmalloc profiler)
endfunction(setup)
setup(foo foo.c)
setup(bar bar.c)
詳細については、the documentationを参照してください。
+0
を。 'add_executable'を' setup'で置き換える必要があります。これを達成するために私がグローバルに設定できる変数がありますか? –
+1
CMAKE_EXE_LINKER_FLAGS変数を変更できます(ビルドディレクトリのCMakeCache.txtを確認してください)。個人的には、関数に切り替えるよりもハックが多いと言えますが、プロジェクト内に実行可能ファイルの数が多い場合は、それがより速い解決方法です。 –
私はあなたが組み込みのコマンドを無効にすることができないことを知りませんでした。知っておいてよかった。 –
"良い"それを置く間違った方法かもしれない知っている! – James
私は 'tcmalloc'文書を読み込んで、リンカリストの最後に来なければならず、' target_link_libraries'で依存関係を指定しても、その状態を保証するものではありません。リンクリストの最後にない場合は、誤ったリークレポートが表示されます。 –