2016-11-17 82 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() 

出於某種原因,我不斷獲取trueIS_NEWER_THAN回來了,所以我加了一些調試語句打印出兩個文件的時間戳:

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_THAN怎麼回來trueSRC_FILE

回答

0

the documentation可以看出,if(file1 IS_NEWER_THAN file2)需要兩個文件名,而不是變量。

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})