CMake execute_process不在windows上生成output_file

时间:2016-08-02 13:16:04

标签: windows cmake

我正在编写一个CMake脚本来为我生成一些差异测试。测试的想法是生成两个文件并对它们进行区分,如果它们相同则结果是成功的。

以下是我脚本的相关部分:

# 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

当我调查我的构建目录时,我注意到在Windows上没有我的文件(我在OUTPUT_FILE参数中指定的内容)存在,而在linux上它们是。当它尝试将mdf_pretty_standalone.tmpoutput.txt_step1用作第三个INPUT_FILE的{​​{1}}时,测试失败。

有什么想法吗?有什么我忘记了吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

检查所有阶段的错误,而不仅仅是最后阶段。早期的步骤可能也失败了(可能是由于目录权限?),但你没有看错误信息。

在每次TEST_ERROR来电之后,请进行execute_process()检查和留言。