CMake(バージョン> = 2.8.7)で何らかの方法でマクロまたはコマンドを最後のステップとして実行して設定フェーズを完了できますか?'設定'ステップが完了する前に最後のステップとしてCMakeでコマンドまたはマクロを実行
次の行が画面に印刷され得る前に、機能を実行する必要があります。
-- Configuring done
-- Generating done
今まで私がadd_custom_command
でこれを達成するために、依存関係として使用することができCMakeのターゲットを見つけることができませんでしたadd_custom_target
またはadd_dependencies
。
EDIT: 他のすべてのCMakeコマンドを実行した後、いくつかのCMakeマクロをエクスポートするライブラリがあり、これらのマクロのいくつかは各CMakeLists.txt
ファイルの最後に実行する必要があります。 CMakeLists.txt
ファイルの最後に追加コマンドを追加することなく、ファイルmacros.cmake
をCMakeLists.txt
ファイルに含めることで、理想的な動作を実現できます。
CMakeLists.txt
の最後に明示的に呼び出す必要がある1つのマクロ内のすべての機能を収集することによってもこれを達成できます。 しかし、すでにいくつかの従属ライブラリが適応される必要があり、この問題の解決策はこの追加の作業を省略します。 また、マクロを追加することを忘れたり、最後のステートメントであるという要件を簡単に破ることができます。
例macros.cmake
:
macro(FINAL_MACRO)
message(STATUS "Last step before finishing Configure phase")
endmacro()
# HERE: something like add_custom_target(final_steps)
# followed by something like add_dependencies(final_steps cmake_configure_finished)
例トップレベルCMakeLists.txt
:
cmake_minimum_required(VERSION 2.8.7)
include(macros.cmake)
add_subdirectory(source)
add_subdirectory(interfaces)
# here FINAL_MACRO should get executed without explicitely writing it down
我々は彼らのCMakeLists.txt
ファイルの末尾に特別なマクロを呼び出すために、すべてのユーザーに要求する必要があります他の選択肢がない場合。
この興味深い発見をありがとうございました。これは、望ましい動作を実現します。しかし、私はそれが確かに少し壊れやすいと感じることに同意します。だから、CMakeがこのようなことをする正式な方法を提供するまで、最終的な関数/マクロの明示的な実行を要求するのが最良の解決策です。 – MKroehnert
@MKroehnert - はい、もし私だったら、すべてのCMakeLists.txtの最後に単一の関数/マクロ呼び出しを追加することになります。あなたはまだそれを試して、それを実施することができます。クローズ機能を持つとプリプロセッサの定義が解除され、ビルドが動作しなくなります。ビットは "ハッキー"でも、隠されたCMakeの内部プロセスに応じて悪くはありませんか? – Fraser
あなたの提案に感謝します。 – MKroehnert