だが、私は2つのライブラリfoo
とbar
、および実行可能app
とcmakeのプロジェクトを持っているとしましょうcmakeのプロジェクトにDLLをコピーしますエラーLNK1104 - cannot open file 'bar.lib'
で失敗しました。私は間違って何をしていますか?これは最も基本的な例のようなものですが、どうすれば失敗するのでしょうか?私はVisual Studio 15.4.2(MSVC 14.11.25503)とCMake 3.9.1でコンパイルしています。は推移的
次の質問、私は私のfoo.dll
とbar.dll
が自動的app.exe
は(私はそれが$<TARGET_FILE_DIR:app>
だろうと仮定)にコンパイルされるフォルダにコピーすることにしたいです。 foo
とにリンクされている方法を変更することなく、foo
とbar
にプロパティ/カスタムコマンドを追加することで、を実行できますか?app
?言い換えれば
、私は新しいターゲットの実行ファイルapp2
を追加した場合、target_link_libraries(app2 foo)
への単純な呼び出しが私はfoo.dll
とbar.dll
が先にコピー持っているを必要とするすべてである、ように上記のスクリプトを変更したいですapp2
のフォルダ。
私がこれまで持っている問題は、既存のソリューションは、私はちょうどadd_custom_command(foo ...)
app
とapp2
ので、任意のフォルダに終わることができ、add_custom_command(... COMMAND ${CMAKE_COMMAND} -E copy_if_different ...)
が明示的に最終ターゲットapp
とapp2
に追加する必要がないことができ関与するということです。
私はtarget_link_libraries(app ...)
を自分の関数(dllをコピーするもの)にラップし、古い_target_link_libraries(app ...)
を呼び出すことを考えていましたが、これはきれいな方法であれば分かりません。それには良い方法があります。
最後に、われわれが見つけた解決策は、IMPORTED
のCMakeサブプロジェクトとしてコンパイルされていないターゲットとライブラリでも動作したいと思います。
[私のgithubプロジェクトの1つ](https://github.com/ComicSansMS/GhulbusBase/blob/master/cmake/gbBaseMacros.cmake.in)のDLLをコピーするためのこの方法を実装しました。全体的なメカニズムは非常に複雑です。[config-fileパッケージシステム](https://cmake.org/cmake/help/v3.9/manual/cmake-packages.7.html#config- file-packages)が、この問題でCMakeから得ることができるサポートの程度を説明するのに役立つかもしれません。 – ComicSansMS
ありがとうございます。私はすでに同様の機能を実装しています(これはあなたのものをほぼそのままコピーしたものです)。私は私が逃したより便利な解決策を見つけることを望んでいた。 – skuld