2012-05-11 4 views
4

CMakeでは、すべての実行ファイルがライブラリにリンクするように指定する方法はありますか?基本的には、すべての実行ファイルがtcmallocとprofilerにリンクされています。単純に-ltcmallocを指定すると、-lprofilerは良い解決策ではありません。私は、CMakeがライブラリへのパスを移植可能な方法で見つけさせるためです。CMakeでは、すべての実行ファイルを指定します。target_link_libraries特定のライブラリ

答えて

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

私はあなたが組み込みのコマンドを無効にすることができないことを知りませんでした。知っておいてよかった。 –

+1

"良い"それを置く間違った方法かもしれない知っている! – James

+0

私は 'tcmalloc'文書を読み込んで、リンカリストの最後に来なければならず、' target_link_libraries'で依存関係を指定しても、その状態を保証するものではありません。リンクリストの最後にない場合は、誤ったリークレポートが表示されます。 –

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を確認してください)。個人的には、関数に切り替えるよりもハックが多いと言えますが、プロジェクト内に実行可能ファイルの数が多い場合は、それがより速い解決方法です。 –