プロジェクトの1つで単体テストを実行するために、実行可能ファイル、ライブラリ、およびその他の関連ファイルを別の場所にコピーして、特定のセットアップで実行できるようにするカスタムコマンドがあります。構築されました。Linuxでは、これは非常に簡単です。しかし、Windowsでは、cmakeが構成名を出力ディレクトリに追加するという事実のために少し問題が発生しました(私は一般的に好きですが、この場合は私がやっていることを台無しにします)。生成されたライブラリまたは実行可能ファイルへのパスを判別するのが難しくなります。たとえば、実行可能ファイルを別のディレクトリにコピーしたばかりのカスタムコマンドがある場合
set(EXE_PATH "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/exeName${CMAKE_EXECUTABLE_SUFFIX}")
set(NEW_EXE_PATH "${RUN_UNITTESTS_DIR}/exeName${CMAKE_EXECUTABLE_SUFFIX}")
add_custom_command(TARGET unitTests POST_BUILD
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${EXE_PATH}" "${NEW_EXE_PATH}")
実行可能ファイルが実際にはにないため、WindowsではチョークしますCMAKE_RUNTIME_OUTPUT_DIRECTORY
。構成タイプに応じて、またはのいずれ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Release
かになり${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debug
ます。Linuxでは、パスを使用してパスに追加することで簡単に修正できますがCMAKE_BUILD_TYPE
、Windowsではcmakeが1つではなく複数の構成を生成するため、Windowsでは機能しません。だから、私がやりたいのは
add_custom_command(TARGET unitTests POST_BUILD
debug
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${DEBUG_EXE_PATH}" "${DEBUG_NEW_EXE}")
add_custom_command(TARGET unitTests POST_BUILD
release
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${RELEASE_EXE_PATH}" "${RELEASE_NEW_EXE}")
いくつかのcmakeコマンドはそれを実行できるように見えますが(例えばtarget_link_libraries
)、私が知る限り、add_custom_target
その機能を提供していません。だから、問題は私がそれをどのように行うかです?Windowsでカスタムコマンドを構成固有にする方法を教えてください。