2016-08-02 93 views
0

我正在寫一個CMake腳本來爲我生成一些差異測試。測試的想法是生成兩個文件並對它們進行比較,如果它們相同,則結果是成功的。CMake execute_process不生成窗口上的output_file

這裏是我的腳本的相關部分:

# pretty_print built_in generation 
message("") 
message("Generating ${BUILT_IN_TMP_FILE}") 
execute_process(
    COMMAND ${DEBUG_EXE} ${BUILT_IN_ARGS} 
    RESULT_VARIABLE TEST_ERROR 
    INPUT_FILE ${MCR_FILE} 
    OUTPUT_FILE ${BUILT_IN_TMP_FILE}) 

# standalone first step - generate the unformatted debug file 
message("Generating ${STANDALONE_TMP_FILE}_step1") 
execute_process(
    COMMAND ${DEBUG_EXE} 
    RESULT_VARIABLE TEST_ERROR 
    INPUT_FILE ${MCR_FILE} 
    OUTPUT_FILE ${STANDALONE_TMP_FILE}_step1) 

message("Generating ${STANDALONE_TMP_FILE}") 
execute_process(
    COMMAND ${MDF_PRETTY_EXE} 
    RESULT_VARIABLE TEST_ERROR 
    INPUT_FILE ${STANDALONE_TMP_FILE}_step1 
    OUTPUT_FILE ${STANDALONE_TMP_FILE}) 

if (TEST_ERROR) 
    message(FATAL_ERROR "Test failed, returned ${TEST_ERROR}") 
else() 
    message("Files generated sucessfully") 
endif() 

當我建立我的Linux上的一切系統順利和我最終生成三個文件的輸出:

47: DEBUG_EXE: /debug 
47: MDF_PRETTY_EXE: /mdf_pretty 

47: Generating /mdf_pretty_built_in.tmpoutput.txt 
47: Generating /mdf_pretty_standalone.tmpoutput.txt_step1 
47: Generating /mdf_pretty_standalone.tmpoutput.txt 
47: Files generated sucessfully 
1/1 Test #47: Osaka.Itch.v1_02:mdf_pretty_diff_test ... Passed 0.05 sec 

然而當我轉向Windows並運行相同的測試時,我得到這個:

47: DEBUG_EXE: /debug.exe 
47: MDF_PRETTY_EXE: /mdf_pretty.exe 

47: Generating Z:/mdf_pretty_built_in.tmpoutput.txt 
47: Generating Z:/mdf_pretty_standalone.tmpoutput.txt_step1 
47: Generating Z:/mdf_pretty_standalone.tmpoutput.txt 
47: CMake Error at Z:/mdf_pretty_diff_test.cmake:69 (message): 
47: Test failed, returned The system cannot find the file specified 
47: 
47: 
1/1 Test #47: Osaka.Itch.v1_02:mdf_pretty_diff_test ...***Failed 0.29 sec 

當我inves tigate我的生成目錄我注意到,在Windows上沒有我的文件(我在OUTPUT_FILE參數中指定的)存在,而在Linux上它們是。當它試圖將mdf_pretty_standalone.tmpoutput.txt_step1作爲INPUT_FILE用於第三個execute_process時,測試失敗。

任何想法?有什麼我忘記了嗎?

謝謝!

回答

1

檢查所有階段的錯誤,而不僅僅是最後一個階段。上一代步驟可能也失敗(可能是由於目錄權限?),但您沒有看到錯誤消息。

把你的TEST_ERROR檢查和消息後,execute_process()調用。

+0

你是對的 - 第一個測試失敗後,返回的訪問被拒絕,現在是失敗的。 – wKavey

+0

你應該真的把這個輸出放到構建樹的本地目錄中。您可能希望使用'$ {CMAKE_CURRENT_BINARY_DIR}'作爲所有臨時文件的前綴。 – Peter

+0

另外,Linux在Linux根目錄下使用二進制文件和輸出文件成功的事實表明,您正在以root身份運行您的構建,這不是一個好主意。 – Peter