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
時,測試失敗。
任何想法?有什麼我忘記了嗎?
謝謝!
你是對的 - 第一個測試失敗後,返回的訪問被拒絕,現在是失敗的。 – wKavey
你應該真的把這個輸出放到構建樹的本地目錄中。您可能希望使用'$ {CMAKE_CURRENT_BINARY_DIR}'作爲所有臨時文件的前綴。 – Peter
另外,Linux在Linux根目錄下使用二進制文件和輸出文件成功的事實表明,您正在以root身份運行您的構建,這不是一個好主意。 – Peter