解決QT NMAKE:-1:error:U 1077:「echo」:戻りコード「0 x 1」


最近cmakeでQTプロジェクトを構築し,いくつかの小さな実験を行い,その間にこの問題に遭遇し,記録した.
ネット上でこの問題に遭遇した人を見て、問題はすべてそれぞれ異なっていて、私のこちらの出会った問題はこのようにして、私はCMakeの中でインポートしたサードパーティのライブラリを生成した実行可能なファイルのbinディレクトリの下にコピーしたいと思って、そこで次の1段のコードを書きました:
#            
add_custom_command(TARGET yxwidgets PRE_BUILD
                   COMMAND ${CMAKE_COMMAND} -E copy_directory
                   ${CMAKE_SOURCE_DIR}/lib/liteavSdk/lib
                   ${bin_dir}/${CMAKE_BUILD_TYPE}
                   )

このコード自体は文法の問題はありませんが、重要な点を間違えました.それはCMAKEです.SOURCE_DIRとCMAKE_CURRENT_SOURCE_DIRの2つのパラメータは、同じ効果が得られる場合がありますが(プロジェクトにサブプロジェクトがない場合)、実際の役割は異なります.公式ドキュメントの説明を見てみましょう.
CMAKE_SOURCE_DIR:
The path to the top level of the source tree. 
           

CMAKE_CURRENT_SOURCE_DIR:
The path to the source directory currently being processed.
This the full path to the source directory that is currently being processed by cmake.
             。
  cmake               。

CMAKE_SOURCE_DIRは、現在のプロジェクトディレクトリの最上位のパスです.プロジェクトを構築するときにプロジェクトがネストされることが多いため、この変数は現在のプロジェクトの最上位ディレクトリのフォルダとして表示されます.
CMAKE_CURRENT_SOURCE_DIRは現在処理中のプロジェクトディレクトリのパスで、栗を挙げます:もしあなたのプロジェクトの中にプロジェクトAがあって、その中にサブプロジェクトBが含まれているならば、CMAKE_SOURCE_DIRは、オペレーティングシステムにおけるプロジェクトAのパスを表し、CMAKE_CURRENT_SOURCE_DIRは、サブプロジェクトBのパスを表す.
私が犯した過ちはCMAKE_SOURCE_DIRをCMAKEとするCURRENT_SOURCE_DIRを使うと、結果的にcmakeがcopyがほしいパスが見つからないので、このエラーを報告したので、このエラーを見た学生は自分のcmakeファイルが間違っているかどうかをチェックすることをお勧めします.
修正後のコード:
#            
add_custom_command(TARGET yxwidgets PRE_BUILD
                   COMMAND ${CMAKE_COMMAND} -E copy_directory
                   ${CMAKE_CURRENT_SOURCE_DIR}/lib/liteavSdk/lib
                   ${bin_dir}/${CMAKE_BUILD_TYPE}
                   )

一言で言えば、私のこの間違いはCmakeListのためです.txtで作成されたライブラリファイルディレクトリエラーによるものです.
 
補足:
2回目にこの問題が発生したのは、プログラムがクラッシュしたためで、私はvisual studioでdumpファイルを開き、デバッグを開いたが、vsはずっと閉じていないので、実行qtをクリックし、再びこのエラーが発生した.vsをデバッグを閉じたり、直接vsを閉じたりすればいい.