1. ホーム
  2. dll

[解決済み] CMakeを使ってDLLファイルを実行ファイルと同じフォルダーにコピーする方法は?

2022-05-17 05:54:45

質問

私たちは SVN でソースの Visual Studio ファイルを生成するために CMake を使用しています。現在、私のツールは、いくつかの DLL ファイルが実行ファイルと同じフォルダーにあることを必要とします。DLL ファイルは、ソースと一緒にフォルダーにあります。

どのようにしたら、私の CMakeLists.txt を変更して、生成された Visual Studio プロジェクトが release/debug フォルダーに特定の DLL ファイルをすでに持っているか、コンパイル時にそれらをコピーするようにするにはどうしたらよいでしょうか。

どのように解決するのですか?

私なら add_custom_command と共に、これを実現するために cmake -E copy_if_different... . 詳細については

cmake --help-command add_custom_command
cmake -E



つまり、あなたの場合、以下のようなディレクトリ構造であれば

/CMakeLists.txt
/src
/libs/test.dll

で、このコマンドが適用されるCMakeのターゲットは MyTest である場合、CMakeLists.txtに以下を追加することができます。

add_custom_command(TARGET MyTest POST_BUILD        # Adds a post-build event to MyTest
    COMMAND ${CMAKE_COMMAND} -E copy_if_different  # which executes "cmake - E copy_if_different..."
        "${PROJECT_SOURCE_DIR}/libs/test.dll"      # <--this is in-file
        $<TARGET_FILE_DIR:MyTest>)                 # <--this is out-file path



の内容全体が欲しいだけなら /libs/ ディレクトリの内容全体をコピーしたい場合は cmake -E copy_directory :

add_custom_command(TARGET MyTest POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_directory
        "${PROJECT_SOURCE_DIR}/libs"
        $<TARGET_FILE_DIR:MyTest>)



もし、構成 (リリース、デバッグなど) に応じて異なる dll をコピーする必要がある場合、対応する構成と同じ名前のサブディレクトリにこれらを置くことができます。 /libs/Release そして /libs/Debug . 次に、コンフィギュレーションタイプを add_custom_command の呼び出しの中で、DLLへのパスに設定タイプを注入する必要があります。

add_custom_command(TARGET MyTest POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_directory
        "${PROJECT_SOURCE_DIR}/libs/$<CONFIGURATION>"
        $<TARGET_FILE_DIR:MyTest>)