2016-11-17 1 views
0

ビルドプロセスの一環として、ビルドされたバイナリを特定の場所にインストールします。cmake:if(file1 IS_NEWER_THAN file2)が壊れていますか?

ビルドされたバイナリのタイムスタンプをチェックし、インストールされているバイナリよりも新しい場合は、それをコピーするカスタムcmakeスクリプトがあります。ここで

は、スクリプトからの抜粋です:何らかの理由

if(SRC_FILE IS_NEWER_THAN DEST_FILE) 
    message(STATUS "installing ${DEST_FILE}") 

    execute_process(
     COMMAND 
      ${CMAKE_COMMAND} -E make_directory ${INSTALL_DIR} 

     COMMAND 
      ${CMAKE_COMMAND} -E copy ${SRC_FILE} ${DEST_FILE} 

     # copy preserves timestamps, so touch to make the installed file newer 
     COMMAND 
      ${CMAKE_COMMAND} -E touch ${DEST_FILE} 
    ) 
endif() 

、私はtrueを得ることに保つIS_NEWER_THANから返されたので、私は、2つのファイルのタイムスタンプをプリントアウトするために、いくつかのデバッグ文を追加しました:ここで

file(TIMESTAMP ${DEST_FILE} DEST_TIMESTAMP) 
file(TIMESTAMP ${SRC_FILE} SRC_TIMESTAMP) 

message("DST_FILE: ${DEST_TIMESTAMP} ${DEST_FILE}") 
message("SRC_FILE: ${SRC_TIMESTAMP} ${SRC_FILE}") 

if(SRC_FILE IS_NEWER_THAN DEST_FILE) 
    message("SRC is newer than DEST") 
endif() 

は、いくつかのサンプル出力です:

DST_FILE: 2016-11-17T15:08:28 /home/steve/src/install/app 
SRC_FILE: 2016-11-17T14:56:35 /home/steve/src/.build/app/app.bin 
SRC is newer than DEST 

これは明らかにSRC_FILE14:56:35で作成されたことを述べている、とDEST_FILE15:08:28で作成されました。

どのようにIS_NEWER_THANSRC_FILEtrueを返すのですか?

答えて

0

the documentationからわかるように、if(file1 IS_NEWER_THAN file2)は変数ではなく2つのファイル名をとります。このように

if(file1 IS_NEWER_THAN file2) 
    True if file1 is newer than file2 or if one of the two files doesn’t exist. 

、あなたは実際のパスがifに渡されるように、あなたの変数を評価する必要があります。誤った

:正しい

if(SRC_FILE IS_NEWER_THAN DEST_FILE) 

if(${SRC_FILE} IS_NEWER_THAN ${DEST_FILE}) 
ある

関連する問題