2016-08-02 8 views
0

私はいくつかの差分テストを生成するCMakeスクリプトを書いています。テストのアイデアは、2つのファイルを生成し、それらをdiffすることで、結果が同一であれば成功します。ここで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のすべての私のシステムを構築うまく行くと私は3つの生成されたファイルと、この出力に終わる:

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 

しかし、私が窓を開けて同じテストを実行すると、私はこれを得ています:

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_step1INPUT_FILEとして3番目のexecute_processとして使用しようとすると、テストは失敗します。

アイデア?私が忘れているものはありますか?

ありがとうございます!

答えて

1

最後のエラーだけでなく、すべての段階でエラーをチェックします。以前の世代の手順もおそらく失敗しています(おそらくディレクトリのアクセス許可のためでしょうか?)が、エラーメッセージは表示されません。

execute_process()コールのたびに、TEST_ERRORのチェックとメッセージを入力します。

+0

あなたは正しいです - 最初に 'テストに失敗しました。アクセスが拒否されました.' – wKavey

+0

本当にこの出力をビルドツリーのローカルディレクトリに置くべきです。すべての一時ファイルの接頭辞として '$ {CMAKE_CURRENT_BINARY_DIR}'を使用したいと思うでしょう。 – Peter

+0

また、これがバイナリとルートディレクトリの出力ファイルでLinux上で成功するということは、ビルドをルートとして実行していることを示唆しています。これは良い考えではありません。 – Peter

関連する問題