New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CMake 3.8.0以降のCTestの文字化け対策 #37
Comments
この件、回答を頂けました。ポイントは下記と理解しました。
私も今日一日現象を調査し、上記結論にまでは達したところでした。 CTestのテスト対象からの出力のUTF-8への変換は、execute_process用cmakeスクリプトを追加することで対応できました。 現在、下記のようなCMakeLists.txtでビルドとテストを1コマンドで処理できるようにしています。 add_executable(build_target ...)
add_custom_target(LongTest COMMAND "ctest" "-V" "-C" "$<CONFIG>" "-L" "Test.*L.*")
add_dependencies(LongTest build_target) cmake --build . --target LongTest テストはビルドの一部と思いますし、テスト前にビルド漏れしたくなかったので、このようにしました。
CMake 3.8.0のCTestの修正は、これです。 そして、UTF-8と決めることができたので、冒頭の制御が行われるようです。
MSBuildとcmake --buildMSBuildは起動前にchcp 65001としておけばUTF-8で日本語出力するし、chcp 437としておけば英語で出力します。ただし、他に英語で出力させる方法が見つかっていません。少なくとも公開されているパラメータにはないようです。 さて、cmake --buildはMSBuildを起動するのですが、その時、コンソールのコードページをCP932へ設定します。cmake --build前にchcp 65001などしていてもCP932になります。 対策案従って、CTestをMSBuildで起動する限り回避することは困難です。 テストはスクリプトからも起動できるので、cmakeスクリプトで起動する方向で進めたいと思います。CMakeのバージョンを問わず機能する筈ですので、これでうまく行けばこの方法を採用します。 |
ビルド部とテスト部をzz_process.cmakeから別途起動し、前者はENCODING AUTO、後者はENCODING無しとすることで、CMake 2.8.0以降の場合、ビルド・ログをUTF-8にしてビルド・ログ内の文字化けを回避できました。 |
Windows上のそれ以前のCMakeではShift-JISのままとなる。 ただし、msvcは3.8.0以上を必須指定する予定。 ------ auto generated message by Theolizer TheolizerDriver : 3f39873d1a0b72b3b678d55526786951 TheolizerLibrary : f895eff9401937bccebc76ddbd100ccf Library's Header : 373c3c8571f1a3a5145eb82c9d090106 ------ end of message
この問題は、コマンド・プロンプトで、chcp 65001 コマンドを発行してUTF-8表示に切り替えることにしました。 そして、ビルド部とテスト部の分離については下記仕様で進めており、概ね完成しました。
この内容でローカル環境(Windowsとubuntu)ではビルドとテストに通っています。 |
CTestから呼び出すテストを全てexecute_process.cmake経由とし、 CMake 3.8.0以降なら、execute_process( ... ENCODING AUTO)指定するようにした。 また、build_toolsのビルド・スクリプトでCMAKE_VERSIONが正規シンボルにかぶっていたので変更。 ------ auto generated message by Theolizer TheolizerDriver : 7d797894e7caf24953369055bafe1146 TheolizerLibrary : 2dd140e84964ed482d476b0e4135424b Library's Header : 373c3c8571f1a3a5145eb82c9d090106 ------ end of message
------ auto generated message by Theolizer auto test(one-set) : PASS TheolizerDriver : 8785e0775e4e7678c4b57dd74b4eedaf TheolizerLibrary : 507d60fb6e940b7a4c51261cb7525f32 Library's Header : 373c3c8571f1a3a5145eb82c9d090106 ------ end of message
この件、対応しました。 CMake 3.8.0にて、Windows向けのCTestの仕様が以下のように変更されています。(linuxには影響しないようです。)
この①と②が頭痛いです。特に②の結果文字化けしないようにするため使い勝手が少し劣化します。 ①の対処これは頂いたアドバスを参考に、add_test()で直接テスト対象を起動するのではなく、 ②の対処リダイレクトせずにビルドする場合は問題ありません。CMakeによるビルド結果はCP932で出力され、CTestの出力もCP932ですので。 この2つをbatを使って1コマンドで起動したい人は頭が痛いことになります。 Theolizerのビルド・システムはビルドとテストを1コマンドで実行するため、上記に該当します。 そこで、CTestの出力をCP932へ変換することは断念し、ビルド・メッセージをUTF-8へ変換することにしました。 また、サマリーを一旦ファイルへ保存し、最後に表示しています。上記理由でサマリーはUTF-8で記録されるため、そのまま出力すると文字化けします。 |
問題なさそうですので、クローズします。 |
Issue #16 からの分岐です。
CMake 3.8.0でCTestに次の修正が入りました。
恐らくそれが原因で、Theolizerにより生成されたアプリのビルド・テストが文字化けするようになりました。コンパイラのエラー・メッセージが全く読めないので、非常に痛いです。
このIssueでこの問題に対処します。
The text was updated successfully, but these errors were encountered: