ビルドプロセスの一環として、ビルドされたバイナリを特定の場所にインストールします。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_FILE
が14:56:35
で作成されたことを述べている、とDEST_FILE
を15:08:28
で作成されました。
どのようにIS_NEWER_THAN
はSRC_FILE
のtrue
を返すのですか?