2017-01-16 5 views
1

CMake add_custom_commandを使用しています。Util.cmakeスクリプトで、後でビルドプロセスで使用されるファイルをダウンロードします。これらのファイルは変更される可能性がありますので、ファイルを再ダウンロードする必要があるかどうかを判断するために、CMake内の指定された値に対してローカルファイルのハッシュ値をチェックする方法を追加したいと考えています。ダウンロードファイルのCMakeチェックハッシュ(MD5/SHA256)

現在、ファイルがダウンロードされると、CMakeはファイルが既にローカルに存在するため、ファイルの再ダウンロードは考慮しません。

今後、そのファイルのMD5/SHA256チェックサムを提供し、ローカルファイルがコアタクトであることを確認したいと思います。ここで

(これは単なる概念の一例である)私がしようとしているものです:

add_custom_command(OUTPUT ./file.dat 
    COMMAND wget ${FILE_PATH} 
) 
if (opt_HASH) 
    add_custom_command(OUTPUT ${local_HASH} 
     COMMAND local_HASH=$(sha256sum ./file.dat) 
     DEPENDS ./file.dat 
    ) 
    if (NOT ${opt_HASH} STREQUAL ${local_HASH}) 
     # throw ERROR 
    endif() 
endif() 

あなたが見ることができるように私は今の不一致を検出したいとしても自動にしたくありません変更されたファイルをダウンロードしてください。 opt_HASHは明らかにCMakeを通じて提供されていますが、重要なのは、この呼び出しがすでにダウンロードされているファイルに依存する必要があることです。より簡単な呼び出しでFILE()を呼び出すことができるようです。

PS:何とかしたら、SHA256よりMD5を使うこともできます。

+0

にハッシュを入れなければならない、あなたはcmakeののExternalDataモジュールを見て撮影したことがありますか? https://cmake.org/cmake/help/v3.2/module/ExternalData.html –

答えて

0

add_custom_targetの使用法は1つの解決策になります。デフォルトでは、常に実行されます。

add_custom_target(UpdateExternalFiles 
    COMMAND "sha256sum -c file.dat.checksum ./file.dat || wget ${FILE_PATH}" 
    COMMAND "sha256sum ./file.dat >> file.dat.checksum" 
) 

最初の行は、チェックサムを検証して差分ファイルを読み込みます。 2行目はチェックサムを更新します。

注:これは、2番目のコマンドでfile.dat.checksumが作成されることを前提としています。

関連する問題