Skip to content
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

vs2017ソリューションにテストプロジェクトを組み込みたい Take2 #999

Merged

Conversation

berryzplus
Copy link
Contributor

PR の目的

vs2017ソリューションにテストプロジェクトを組み込むことにより、
テストコードを従来より簡単に実行できるようにします。

経緯

あえて省略 😃

目的や実現方法の妥当性判断にあたり必要な情報ではないと考えるので、今回は割愛します。
(情報量が多すぎて、何が目的でどう実現するのか、の把握の邪魔になると思うので)

カテゴリ

  • ビルド手順 (バッチを叩かなくてもテストを実行できるようになります)
  • CI関連
    • Appveyor
    • Azure Pipelines
  • その他 (googletestのビルドに使うジェネレータが変更になります)

PR のメリット

  • visual studio の IDE から直接テストのデバッグ実行ができるようになります。
    • テストコードと被テストコードが同じソリューション内に収まるので、デバッグ効率の改善を期待できます。

PR のデメリット (トレードオフとかあれば)

  • 新しいテストの追加時に、テストプロジェクトのメンテが必要になります。
    • 従来は cmake がビルド対象を拾ってくれる仕組みになっていました。

変更は、ソリューションにテストプロジェクトを組み込むことを最優先に作成しています。
従来のテストバッチとの互換性について「エラーにならないように」以上の配慮を行っていません。
テストバッチのフロー整理、重複タスクの排除などの改善は、別途行う必要があると思います。

PR の影響範囲

  • ソリューション内にテストプロジェクトが追加されます。
    • テスト対象コードとテストコードが同一ソリューション内に収まることにより、開発効率の改善を期待できます。
  • テストプロジェクトのプロジェクトファイルが追加されます。
    • 新しいテストの追加時、既存テストの廃止時にメンテが必要になります。
  • visual studio の IDE から直接テストのデバッグができるようになります。
    • 注:従来構成でも cmake が生成した sln を開けばデバッグは可能でしたが、手順が減ります。
  • visual studio の IDE からもテストの実行ができるようになります。
    • テスト結果の確認、失敗したテストにジャンプなど、Test Explorer の機能を活用できるようになります。
    • 注:従来構成でも cmake が生成した sln を開けば(ry
  • googletest のビルドに使うジェネレータが Ninja に変わります。
    • 変更前は Visual Stdio 15 2017 ジェネレータが使われていました。
    • 検証 【検証】忍者 vs Visual Studio 15 2017 #956 に基づき、ビルド速度の速い Ninja を採用します。
    • 最終的に使われるC++コンパイラが同じなので、影響はないと思います。
  • テストモジュールの機能に影響はありません。
  • アプリ(=サクラエディタ)の機能に影響はありません。

関連チケット

close #793 vs2017ソリューションにテストを組み込みたい
#796 [WIP] vs2017ソリューションにテストを組み込みたい ← このPRで置換します。
#943 DISABLED テストのサンプルを追加する ← 入れてね、と依頼されている。対応済み。
#944 fixture テストのサンプルを追加する ← 入れたい、と要望があった。取り下げられたので対応してません。
#956 【検証】忍者 vs Visual Studio 15 2017 ← Ninja採用に至った経緯です。

@berryzplus
Copy link
Contributor Author

しまった。 #989 C++の準拠規格をC++17に更新する の変更を反映するのを忘れていた 😭

@AppVeyorBot
Copy link

@AppVeyorBot
Copy link

Copy link
Contributor

@beru beru left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sakura.sln をVS2017で開いて tests1 プロジェクトをビルドしたらエラーが出ました。

1>------ Build started: Project: tests1, Configuration: Release x64 ------
1>find-tools.bat
1>|- CMD_GIT=C:\Program Files\Git\cmd\git.exe
1>|- CMD_7Z=C:\Program Files\7-Zip\7z.exe
1>|- CMD_HHC=C:\Program Files (x86)\HTML Help Workshop\hhc.exe
1>|- CMD_ISCC=C:\Program Files (x86)\Inno Setup 5\ISCC.exe
1>|- CMD_CPPCHECK=C:\Program Files\Cppcheck\cppcheck.exe
1>|- CMD_DOXYGEN=
1>|- CMD_VSWHERE=C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe
1>|- CMD_MSBUILD=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\amd64\MSBuild.exe
1>|- CMD_CMAKE=C:\Program Files\CMake\bin\cmake.exe
1>end
1>**********************************************************************
1>** Visual Studio 2017 Developer Command Prompt v15.9.15
1>** Copyright (c) 2017 Microsoft Corporation
1>**********************************************************************
1>[vcvarsall.bat] Environment initialized for: 'x86_x64'
1>EXEC : CMake error : CMake was unable to find a build program corresponding to "Ninja".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
1>-- Configuring incomplete, errors occurred!
1>See also "C:/projects/sakura/tests/build/x64/Release/googletest/CMakeFiles/CMakeOutput.log".
1>C:\projects\sakura\tests\googletest.targets(41,5): error MSB3073: The command "C:\projects\sakura\tests\googletest.build.cmd C:\projects\sakura\tests\googletest\ Release "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary/Build/vcvarsall.bat" x86_amd64" exited with code 1.
1>Done building project "tests1.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 3 up-to-date, 0 skipped ==========

@beru
Copy link
Contributor

beru commented Aug 17, 2019

Ninja を入れていない環境ではビルドに失敗してしまうようなので、build.mdunittest.md にその旨は書いたほうが良いような気はします。丁寧にやるなら where コマンドでパスが通ってなかったら元の generator を使うとか…。

まぁでも説明が無いとやっていけないようでは結局のところ良く分からないだろう精神で、どんどんと謎の迷宮が掘られていくのが宿命かも?

@berryzplus
Copy link
Contributor Author

Ninja を入れていない環境ではビルドに失敗してしまうようなので、build.md か unittest.md にその旨は書いたほうが良いような気はします。丁寧にやるなら where コマンドでパスが通ってなかったら元の generator を使うとか…。

Visual C++ tools for CMake and Linux というのを入れると Ninja が入るみたいです。

こいつはデフォルト選択のオプションで、外さない限り勝手にインストールされる・・・はず。
CMake サポートは途中から強化されたような気がするので、前からずっとそうか?と訊かれると自身はありません。

azure pipelinesでは Ninja サポートについて一言も言及がなく、デフォルトではパスにも入っていませんが、vcvarsallでパスを通せば Ninja が使えます。これが標準だ、といえる根拠になるかどうかは分かりませんけども 😄

@beru
Copy link
Contributor

beru commented Aug 17, 2019

情報ありがとうございます。この下のやつですか?

image

デフォルトでチェックが入っていたか覚えていませんが、容量減らしたいので色々チェックは外したかも。。

チェックを付けてビルドした今度は下記のようなエラーが出ました。

Severity	Code	Description	Project	File	Line	Suppression State
Error	LNK2001	unresolved external symbol __RTC_Shutdown	tests1	D:\projects\sakura\tests\unittests\testCCompiler.c.obj	1	
Error	LNK2001	unresolved external symbol __RTC_InitBase	tests1	D:\projects\sakura\tests\unittests\testCCompiler.c.obj	1	
Error	LNK2001	unresolved external symbol _mainCRTStartup	tests1	D:\projects\sakura\tests\unittests\LINK	1	
Error	MSB3073	The command "D:\projects\sakura\tests\googletest.build.cmd D:\projects\sakura\tests\googletest\ Release "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary/Build/vcvarsall.bat" x86_amd64" exited with code 1.	tests1	D:\projects\sakura\tests\googletest.targets	41	
Error	LNK1120	3 unresolved externals	tests1	D:\projects\sakura\tests\unittests\cmTC_634a2.exe	1	

まずはリビルドしてみよう…。

@beru
Copy link
Contributor

beru commented Aug 17, 2019

リビルドしても通りませんでした。

4>testCCompiler.c.obj : error LNK2001: unresolved external symbol __RTC_InitBase
4>testCCompiler.c.obj : error LNK2001: unresolved external symbol __RTC_Shutdown
4>LINK : error LNK2001: unresolved external symbol _mainCRTStartup
4>C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x64\kernel32.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'X86'
4>C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x64\user32.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'X86'
4>C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x64\gdi32.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'X86'
4>C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x64\winspool.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'X86'
4>C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x64\shell32.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'X86'
4>C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x64\ole32.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'X86'
4>C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x64\oleaut32.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'X86'
4>C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x64\uuid.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'X86'
4>C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x64\comdlg32.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'X86'
4>C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x64\advapi32.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'X86'
4>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\lib\x64\MSVCRTD.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'X86'
4>cmTC_92374.exe : fatal error LNK1120: 3 unresolved externals
4>    ninja: build stopped: subcommand failed.

x64 の Release だとビルドが通らないみたいですね。でも Azure Pipelines では通ってるなぁ…。

@berryzplus
Copy link
Contributor Author

何故だっ!・・・(マジ理由が分からんです。

@berryzplus
Copy link
Contributor Author

症状としてはLIBの環境変数が正しく設定されなかった場合に似ていると思います。
そういう現象の対策として vcvarsall.bat を叩いているので状況がよく分らんです。

windows 10 SDKのバージョンとかは関係ないと思ってますけど、それかなぁ・・・。

@berryzplus
Copy link
Contributor Author

あ、一度visual studioを閉じて、git cleanupしてからビルドしてみてもらっていいですか?
開いてたファイルの情報とか消えちゃうんですが、リセットはそこまでやらんと働かないっぽいです。

@beru
Copy link
Contributor

beru commented Aug 17, 2019

VS閉じてから git cleanup してから sakura.sln 開き直して tests1 プロジェクトをビルドしたら下記のエラーが出ました。

4>[vcvarsall.bat] Environment initialized for: 'x86'
4>-- The C compiler identification is MSVC 19.0.24215.1
4>-- The CXX compiler identification is MSVC 19.0.24215.1
4>-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe
4>-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe -- broken
4>CMake Error at C:/Program Files/CMake/share/cmake-3.15/Modules/CMakeTestCCompiler.cmake:60 (message):
4>-- Configuring incomplete, errors occurred!
4>See also "D:/projects/sakura/tests/build/Win32/Debug/googletest/CMakeFiles/CMakeOutput.log".
4>See also "D:/projects/sakura/tests/build/Win32/Debug/googletest/CMakeFiles/CMakeError.log".
4>  The C compiler
4>
4>    "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe"
4>
4>  is not able to compile a simple test program.
4>
4>  It fails with the following output:
4>
4>    Change Dir: D:/projects/sakura/tests/build/Win32/Debug/googletest/CMakeFiles/CMakeTmp
4>
4>    Run Build Command(s):C:/PROGRA~2/MIB055~1/2017/COMMUN~1/Common7/IDE/COMMON~1/MICROS~1/CMake/Ninja/ninja.exe cmTC_d5879 && [1/2] Building C object CMakeFiles\cmTC_d5879.dir\testCCompiler.c.obj
4>    [2/2] Linking C executable cmTC_d5879.exe
4>    FAILED: cmTC_d5879.exe
4>    cmd.exe /C "cd . && "C:\Program Files\CMake\bin\cmake.exe" -E vs_link_exe --intdir=CMakeFiles\cmTC_d5879.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100183~1.0\x86\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100183~1.0\x86\mt.exe --manifests  -- C:\PROGRA~2\MICROS~4.0\VC\bin\link.exe /nologo CMakeFiles\cmTC_d5879.dir\testCCompiler.c.obj  /out:cmTC_d5879.exe /implib:cmTC_d5879.lib /pdb:cmTC_d5879.pdb /version:0.0  /machine:X86  /debug /INCREMENTAL /subsystem:console  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."
4>    LINK Pass 1: command "C:\PROGRA~2\MICROS~4.0\VC\bin\link.exe /nologo CMakeFiles\cmTC_d5879.dir\testCCompiler.c.obj /out:cmTC_d5879.exe /implib:cmTC_d5879.lib /pdb:cmTC_d5879.pdb /version:0.0 /machine:X86 /debug /INCREMENTAL /subsystem:console kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:CMakeFiles\cmTC_d5879.dir/intermediate.manifest CMakeFiles\cmTC_d5879.dir/manifest.res" failed (exit code 1120) with the following output:
4>MSVCRTD.lib(loadcfg.obj) : error LNK2001: unresolved external symbol ___enclave_config
4>cmTC_d5879.exe : fatal error LNK1120: 1 unresolved externals
4>    ninja: build stopped: subcommand failed.
Severity	Code	Description	Project	File	Line	Suppression State
Error	LNK1120	1 unresolved externals	tests1	D:\projects\sakura\tests\unittests\cmTC_4e6d8.exe	1	
Error	MSB3073	The command "D:\projects\sakura\tests\googletest.build.cmd D:\projects\sakura\tests\googletest\ Debug "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary/Build/vcvarsall.bat" x86" exited with code 1.	tests1	D:\projects\sakura\tests\googletest.targets	41	
Error	LNK2001	unresolved external symbol ___enclave_config	tests1	D:\projects\sakura\tests\unittests\MSVCRTD.lib(loadcfg.obj)	1	

まぁ googletest 使う限りこういうのとは逃れられないですね…。

@beru
Copy link
Contributor

beru commented Aug 17, 2019

x64 Release だと以前と同じエラーが出ますね。おま環ってやつでしょうか…。

@berryzplus
Copy link
Contributor Author

まぁ googletest 使う限りこういうのとは逃れられないですね…。

そういえば代替の提案がありましたねw

エラーメッセージを見る限り、Visual Studio ジェネレーターを使えば発生しない問題のようなので、これで対応しとこうと思います。

丁寧にやるなら where コマンドでパスが通ってなかったら元の generator を使うとか…。

where ninja.exe > NUL 2&>1
if errorlevel 1 set GENERATOR=Visual Studio 15 2017

みたいな感じで 😄

@berryzplus
Copy link
Contributor Author

対応しました。

丁寧にやるなら where コマンドでパスが通ってなかったら元の generator を使うとか…。

where ninja.exe > NUL 2>&1
if errorlevel 1 set GENERATOR=Visual Studio 15 2017

みたいな感じで 😄

visual studio から叩くと、デフォルトのジェネレーターがVisual Studioになるようなので、Ninjaがある場合に指定する、それ以外は指定しない、の実装にしてみました。

デフォルトでビルド通らなかったら(´・ω・`)です。

@beru
Copy link
Contributor

beru commented Aug 17, 2019

CMAKE_BUILD_TYPE 未指定の場合にデバッグになるのか、コマンドラインを見ると /debug というのが Win32 Release でビルドしても出てます。

4>    Run Build Command(s):C:/PROGRA~2/MIB055~1/2017/COMMUN~1/Common7/IDE/COMMON~1/MICROS~1/CMake/Ninja/ninja.exe cmTC_3f5a5 && [1/2] Building C object CMakeFiles\cmTC_3f5a5.dir\testCCompiler.c.obj
4>    [2/2] Linking C executable cmTC_3f5a5.exe
4>    FAILED: cmTC_3f5a5.exe
4>    cmd.exe /C "cd . && "C:\Program Files\CMake\bin\cmake.exe" -E vs_link_exe --intdir=CMakeFiles\cmTC_3f5a5.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100183~1.0\x86\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100183~1.0\x86\mt.exe --manifests  -- C:\PROGRA~2\MICROS~4.0\VC\bin\link.exe /nologo CMakeFiles\cmTC_3f5a5.dir\testCCompiler.c.obj  /out:cmTC_3f5a5.exe /implib:cmTC_3f5a5.lib /pdb:cmTC_3f5a5.pdb /version:0.0  /machine:X86  /debug /INCREMENTAL /subsystem:console  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."
4>    LINK Pass 1: command "C:\PROGRA~2\MICROS~4.0\VC\bin\link.exe /nologo CMakeFiles\cmTC_3f5a5.dir\testCCompiler.c.obj /out:cmTC_3f5a5.exe /implib:cmTC_3f5a5.lib /pdb:cmTC_3f5a5.pdb /version:0.0 /machine:X86 /debug /INCREMENTAL /subsystem:console kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:CMakeFiles\cmTC_3f5a5.dir/intermediate.manifest CMakeFiles\cmTC_3f5a5.dir/manifest.res" failed (exit code 1120) with the following output:
4>MSVCRTD.lib(loadcfg.obj) : error LNK2001: unresolved external symbol ___enclave_config
4>cmTC_3f5a5.exe : fatal error LNK1120: 1 unresolved externals
4>    ninja: build stopped: subcommand failed.

@berryzplus
Copy link
Contributor Author

CMAKE_BUILD_TYPE 未指定の場合にデバッグになるのか、コマンドラインを見ると /debug というのが Win32 Release でビルドしても出てます。

その出力は cmake がコンパイラをチェックするために仮のCPPをビルドしてるだけなので関係ないっす。

@beru
Copy link
Contributor

beru commented Aug 17, 2019

え、そうなんですか?メッセージ見ると /debug が含まれたコマンドラインで testCCompiler.c.obj をコンパイルしていてその後のリンクで失敗して止まっているように見えますが…。

@beru
Copy link
Contributor

beru commented Aug 17, 2019

pull してから git cleanup して sakura.sln を開き直して tests1 プロジェクトをビルドしてみましたが状況は変わりませんでした。

@berryzplus
Copy link
Contributor Author

ninjaがパスにいるとninja使ってしまうので、ninjaをアンインストールしないと・・・

めんどくさすぎですな...orz

@berryzplus
Copy link
Contributor Author

ninjaいてもビルド通るように対策したい気持ちもありますが、vcvarsall呼んでもダメだとすると原因が分からないです。

@berryzplus
Copy link
Contributor Author

ん?x64ビルドしてるって言ってませんでしたっけ?

4>[vcvarsall.bat] Environment initialized for: 'x86'
4>-- The C compiler identification is MSVC 19.0.24215.1
4>-- The CXX compiler identification is MSVC 19.0.24215.1
4>-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe
4>-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe -- broken

先頭行にx86と出ている...

@berryzplus
Copy link
Contributor Author

作成ミス発見しましたので対応しまっすm(..)m

@AppVeyorBot
Copy link

@beru
Copy link
Contributor

beru commented Aug 17, 2019

ん?x64ビルドしてるって言ってませんでしたっけ?

x64 Release で通らなかったので他の Configuration でもビルドが通るか確認しています。

@berryzplus
Copy link
Contributor Author

x64ビルド時にx86のcl.exeが選択される現象を確認しました。
x86ビルドでしかチェックしていませんでした。
azure pipelinesで通ったから油断してたかも。

@beru
Copy link
Contributor

beru commented Aug 17, 2019

tests/googletest.build.cmd を編集して set GENERATOR=-G "Ninja" している辺りをコメントアウトしてビルドすると VS2019 が generator に選択されてしまうのかまたビルドエラーになってしまいます。

tests/unittests/tests1.vcxproj を見ると下記の記述があって、

<Import Project="$(ProjectDir)..\googletest.targets" />

VS2017のSolution Explorerで見れるかと思ったら一覧に挙がっていませんでした。

googletest.targets の中の記述を見ると下記の記述があり

<Exec Command="$(MSBuildThisFileDirectory)googletest.build.cmd $(GoogleTestSourceDir) $(Configuration) &quot;$(VCInstallDir)Auxiliary/Build/vcvarsall.bat&quot; $(VcVarsArchitecture)" WorkingDirectory="$(GoogleTestBuildDir)" />

コマンドを実行していますね。

うーんピタゴラスイッチ。

@beru
Copy link
Contributor

beru commented Aug 17, 2019

doctest というのに切り替えませんか?

@berryzplus
Copy link
Contributor Author

原因コレだったっぽいです。

@berryzplus
Copy link
Contributor Author

doctest というのに切り替えませんか?

それはそれとして、一旦googletestでやりたいっす。

Copy link
Contributor

@beru beru left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ローカルで Win32/x64, Debug/Release の4パターンでビルドが通る事を確認したので問題無いと思います。

tests1 プロジェクトをビルドするだけだとテストは実行されないので少し不便だなと感じました(小並感

@berryzplus
Copy link
Contributor Author

今回の修正の構成

  • sakura.sln ソリューションファイル。元からあった。プロジェクト追加のため変更。
    • tests/unittests/tests1.vcxproj テストプロジェクト。新規追加。
      • tests/googletest.targets ビルドターゲット定義ファイル。googletestをビルド&リンクする設定をここにまとめてあります。
      • tests/googletest.build.cmd ビルドコマンド。実態はただのバッチです。googletest.targetsから渡したパラメータを使って、git submodule updateしてcmakeビルドを行います。

何がいけなかったのか?
where cl.exeの結果がこうなっていました。

  • x64向けコンパイラcl.exe ←これを使いたかった
  • x86向けコンパイラcl.exe ←これを使っていた

。。。_| ̄|○

@AppVeyorBot
Copy link

@berryzplus
Copy link
Contributor Author

レビューありがとうございます。

tests1 プロジェクトをビルドするだけだとテストは実行されないので少し不便だなと感じました(小並感

visual studio メインメニューから test -> Run -> All Tests でいきなりビルドしてテスト実行までできますよ~ 😃

@berryzplus berryzplus merged commit 75d5f21 into sakura-editor:master Aug 17, 2019
@berryzplus berryzplus deleted the feature/add_test_project_for_MSVC branch August 17, 2019 17:12
@beru
Copy link
Contributor

beru commented Aug 17, 2019

visual studio メインメニューから test -> Run -> All Tests でいきなりビルドしてテスト実行までできますよ~ 😃

お、情報ありがとうございます。メニューバーをカスタマイズしていましたが Reset All したら出てきました。メニューから無事動かす事が出来ました。用済みなのでメニューを再度消して忘れる事にします。

@beru
Copy link
Contributor

beru commented Aug 18, 2019

別のPCで実行すると下記のエラーが出ました。

Severity	Code	Description	Project	File	Line	Suppression State
Error	MSB8052	MSVC toolset version '14.16.27023' is not compatible with 'v142' platform toolset. To fix: right-click project > Properties > Advanced > MSVC Toolset Version > choose a version with the format '14.2*.*' or 'Default'.  [C:\projects\sakura\tests\build\x64\Release\googletest\CMakeFiles\3.14.5\VCTargetsPath.vcxproj]	tests1	C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets	395	
Error	MSB8052	MSVC toolset version '14.16.27023' is not compatible with 'v142' platform toolset. To fix: right-click project > Properties > Advanced > MSVC Toolset Version > choose a version with the format '14.2*.*' or 'Default'.  [C:\projects\sakura\tests\build\x64\Release\googletest\CMakeFiles\3.14.5\VCTargetsPath.vcxproj]	tests1	C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets	395	
Error	MSB3073	The command "C:\projects\sakura\tests\googletest.build.cmd C:\projects\sakura\tests\googletest\ Release "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary/Build/vcvarsall.bat" x86_amd64" exited with code 1.	tests1	C:\projects\sakura\tests\googletest.targets	41	
1>------ Build started: Project: tests1, Configuration: Release x64 ------
1>find-tools.bat
1>|- CMD_GIT=C:\Program Files\Git\cmd\git.exe
1>|- CMD_7Z=C:\Program Files\7-Zip\7z.exe
1>|- CMD_HHC=C:\Program Files (x86)\HTML Help Workshop\hhc.exe
1>|- CMD_ISCC=C:\Program Files (x86)\Inno Setup 5\ISCC.exe
1>|- CMD_CPPCHECK=C:\Program Files\Cppcheck\cppcheck.exe
1>|- CMD_DOXYGEN=
1>|- CMD_VSWHERE=C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe
1>|- CMD_MSBUILD=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\amd64\MSBuild.exe
1>|- CMD_CMAKE=C:\Program Files\CMake\bin\cmake.exe
1>end
1>**********************************************************************
1>** Visual Studio 2017 Developer Command Prompt v15.9.15
1>** Copyright (c) 2017 Microsoft Corporation
1>**********************************************************************
1>[vcvarsall.bat] Environment initialized for: 'x86_x64'
1>-- Selecting Windows SDK version 10.0.17763.0 to target Windows 10.0.18362.
1>CMake Error at CMakeLists.txt:15 (project):
1>-- Configuring incomplete, errors occurred!
1>See also "C:/projects/sakura/tests/build/x64/Release/googletest/CMakeFiles/CMakeOutput.log".
1>  Failed to run MSBuild command:
1>
1>    C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/MSBuild/Current/Bin/MSBuild.exe
1>
1>  to get the value of VCTargetsPath:
1>
1>    .NET Framework 蜷代¢ Microsoft (R) Build Engine 繝舌・繧ク繝ァ繝ウ 16.2.37902+b5aaefc9f
1>    Copyright (C) Microsoft Corporation.All rights reserved.
1>
1>    2019/08/18 14:36:22 縺ォ繝薙Ν繝峨r髢句ァ九@縺セ縺励◆縲・
1>    繝弱・繝・1 荳翫・繝励Ο繧ク繧ァ繧ッ繝・"C:\projects\sakura\tests\build\x64\Release\googletest\CMakeFiles\3.14.5\VCTargetsPath.vcxproj" (譌「螳壹・繧ソ繝シ繧イ繝・ヨ)縲・
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(395,5): error MSB8052: MSVC toolset version '14.16.27023' is not compatible with 'v142' platform toolset. To fix: right-click project > Properties > Advanced > MSVC Toolset Version > choose a version with the format '14.2*.*' or 'Default'.  [C:\projects\sakura\tests\build\x64\Release\googletest\CMakeFiles\3.14.5\VCTargetsPath.vcxproj]
1>    繝励Ο繧ク繧ァ繧ッ繝・"C:\projects\sakura\tests\build\x64\Release\googletest\CMakeFiles\3.14.5\VCTargetsPath.vcxproj" (譌「螳壹・繧ソ繝シ繧イ繝・ヨ) 縺ョ繝薙Ν繝峨′邨ゆコ・@縺セ縺励◆ -- 螟ア謨励�・
1>
1>    繝薙Ν繝峨↓螟ア謨励@縺セ縺励◆縲・
1>
1>    "C:\projects\sakura\tests\build\x64\Release\googletest\CMakeFiles\3.14.5\VCTargetsPath.vcxproj" (譌「螳壹・繧ソ繝シ繧イ繝・ヨ) (1) ->
1>    (PrepareForBuild 繧ソ繝シ繧イ繝・ヨ) ->
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(395,5): error MSB8052: MSVC toolset version '14.16.27023' is not compatible with 'v142' platform toolset. To fix: right-click project > Properties > Advanced > MSVC Toolset Version > choose a version with the format '14.2*.*' or 'Default'.  [C:\projects\sakura\tests\build\x64\Release\googletest\CMakeFiles\3.14.5\VCTargetsPath.vcxproj]
1>
1>        0 蛟九・隴ヲ蜻・
1>        1 繧ィ繝ゥ繝シ
1>
1>    邨碁℃譎る俣 00:00:00.45
1>
1>
1>  Exit code: 1
1>
1>
1>
1>C:\projects\sakura\tests\googletest.targets(41,5): error MSB3073: The command "C:\projects\sakura\tests\googletest.build.cmd C:\projects\sakura\tests\googletest\ Release "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary/Build/vcvarsall.bat" x86_amd64" exited with code 1.
1>Done building project "tests1.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 3 up-to-date, 0 skipped ==========

VS2017 でビルドしたにも関わらず VS2019 の MSBuild を使ってしまっているようです。

@berryzplus
Copy link
Contributor Author

berryzplus commented Aug 18, 2019

VS2017 でビルドしたにも関わらず VS2019 の MSBuild を使ってしまっているようです。

これの対応で不十分な環境があるってことですね。
#999 (comment)

  • ninjaがなかったらデフォルトジェネレーターでビルドする
    • デフォルトジェネレーターは環境によって異なるっぽい
      • ジェネレータをちゃんと指定しないとダメ!

すんません、対策PR作りますm(>。。<)m

@beru beru added CI appveyor など CI 関連 【ChangeLog除外】 UnitTest labels Aug 23, 2019
@m-tmatma m-tmatma added this to the v2.4.0 milestone Dec 29, 2019
HoppingTappy pushed a commit to HoppingTappy/sakura that referenced this pull request Jun 16, 2020
…_project_for_MSVC

vs2017ソリューションにテストプロジェクトを組み込みたい Take2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CI appveyor など CI 関連 【ChangeLog除外】 UnitTest
Projects
None yet
Development

Successfully merging this pull request may close these issues.

vs2017ソリューションにテストを組み込みたい
4 participants