私はいくつかの差分テストを生成する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_step1
をINPUT_FILE
として3番目のexecute_process
として使用しようとすると、テストは失敗します。
アイデア?私が忘れているものはありますか?
ありがとうございます!
あなたは正しいです - 最初に 'テストに失敗しました。アクセスが拒否されました.' – wKavey
本当にこの出力をビルドツリーのローカルディレクトリに置くべきです。すべての一時ファイルの接頭辞として '$ {CMAKE_CURRENT_BINARY_DIR}'を使用したいと思うでしょう。 – Peter
また、これがバイナリとルートディレクトリの出力ファイルでLinux上で成功するということは、ビルドをルートとして実行していることを示唆しています。これは良い考えではありません。 – Peter