nprogram’s blog

気ままに、プログラミングのトピックについて書いていきます

Google Test導入方法 [VS2017] [Cmake] [C++]

環境について

以下の環境で、Google Testを使用してみます。

  • Windows 10
  • Visual Studio 2017 Community
  • Cmake 3.10.2
  • C++

なお、Visual Studio 2017 バージョン 15.5 以降では、Google Test が C++ ワークロードでのデスクトップ開発の既定のコンポーネントとして Visual Studio IDE に統合されており、より簡単にGoogle Testの導入が可能です。以下の記事に詳細を記載しました。

nprogram.hatenablog.com

Google Testのライブラリファイル生成手順

まず、Google Testを、GitHubからダウンロードします。 Zipファイルでダウンロードしてください。 ダウンロード後は、アクセス制限がかからないフォルダまで移動してください。 この後、Cドライブ直下など、アクセス制限のあるフォルダで作業すると、Visual Studioでビルドするときに、エラーになってビルドできなくなる可能性があるためです。 github.com

次に、以下のホームページでCMakeをダウンロードします。(例 : cmake-3.10.2-win64-x64.msi)
https://cmake.org/

環境変数の設定は、インストール時の設定で解決できそうです。
f:id:nprogram:20180131041231p:plain

この後、Visual Studioを用いてビルドします。
Cmake 3.10.2でビルドできるVisual Studioのバージョンは、以下のとおり。
本情報は、cmake公式ページのドキュメントのHELP(V3.10)のVisual Studio Generatorsの項目に記載があります。
https://cmake.org/documentation/

  • Visual Studio 6
  • Visual Studio 7
  • Visual Studio 7 .NET 2003
  • Visual Studio 8 2005
  • Visual Studio 9 2008
  • Visual Studio 10 2010
  • Visual Studio 11 2012
  • Visual Studio 12 2013
  • Visual Studio 14 2015
  • Visual Studio 15 2017

(1) コマンドプロンプトを開き、ダウンロードしたGoogle Testまで移動。 <your dir path>googletest-master\googletest
(2) googletest-master\googletestのまでcdコマンドで移動
(3) mkdir buildで、ワーキングディレクトリ作成
(4) cd buildでワーキングディレクトリに移動
(5) cmake .. -DBUILD_GTEST=ON -DBUILD_GMOCK=OFF -G "Visual Studio 15 Win64"でビルドする

<コマンドプロンプト出力結果>

<working dir path>googletest-master\googletest\build>cmake .. -DBUILD_GTEST=ON -DBUILD_GMOCK=OFF -G "Visual Studio 15 Win64"
-- Selecting Windows SDK version 10.0.15063.0 to target Windows 10.0.16299.
-- The CXX compiler identification is MSVC 19.11.25508.2
-- The C compiler identification is MSVC 19.11.25508.2
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.11.25503/bin/HostX86/x64/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.11.25503/bin/HostX86/x64/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.11.25503/bin/HostX86/x64/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.11.25503/bin/HostX86/x64/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Found PythonInterp: C:/Program Files/Python36/python.exe (found version "3.6.2")
-- Looking for pthread.h
-- Looking for pthread.h - not found
-- Found Threads: TRUE
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    BUILD_GMOCK
    BUILD_GTEST


-- Build files have been written to: <working dir path>googletest-master/googletest/build

(6) ワーキングディレクトリにプロジェクトファイルgtest.slnが作成されるので、開きます。

(7) プロジェクトのALL_BUILDをビルドします。ライブラリファイルは、build\Debugbuild\Releaseに作成されます。pdbファイルを含めた中間ファイルは、build\gtest.dirに作成されます。
* gtestd.lib * gtest.pdb * gtest_maind.lib * gtest_main.pdb Releaseフォルダ以下にも以下のように作成されます。 gtest.lib gtest_main.lib

Visual StudioでGoogle Testのライブラリファイルを使用する

本方法は参考ページに非常に詳しく記載されています。

  Sample
  │  Sample.sln
  └─Sample
     │  Sample.cpp
     │  Sample.vcxproj
     │  Sample.vcxproj.filters
     │  ReadMe.txt
     │  stdafx.cpp
     │  stdafx.h
     │  targetver.h
     │
     ├─include     // googletest-master\googletest\include をコピー
     │
     └─lib         // googletest-master\googletest\buildのDebugとReleaseフォルダをコピー(※1)
         ├─Debug
         └─Release

(※1) pdbファイルが必要な場合は、```build\gtest.dir```から取得してください

(1) 構成を[すべての構成] に設定し、INCLUDEディレクトリの追加
ソリューション右クリック -> プロパティ -> 構成プロパティ -> C/C++ -> [追加のインクルードディレクトリ] -> gtestのincludeディレクトリを追加
※$(ProjectDir)を使用して追加した方がよい
例:$(ProjectDir)include

(2) 構成を[すべての構成] に設定し、libファイルのリンク設定
ソリューション右クリック -> プロパティ -> 構成プロパティ -> リンカー -> [追加のライブラリディレクトリ] -> gtestのlibのディレクトリを追加 $(Configuration)を利用して追加した方がよい
例:$(ProjectDir)lib\$(Configuration)
ソリューション右クリック -> プロパティ -> 構成プロパティ -> リンカー -> 入力 -> [追加の依存ファイル] ->

(2-1) 構成を[Release] に設定し、下記を追加 gtest.lib gtest_main.lib

(2-2) 構成を[Debug] に設定し、下記を追加 gtestd.lib gtest_maind.lib

(3) ランタイムライブラリのリンク方法の指定を変更
ソリューション右クリック -> プロパティ -> 構成プロパティ -> C/C++ -> コード生成 -> [ランタイムライブラリ] ->
(3-1) 構成を[Release] に設定し、[マルチスレッド (/MT)] を設定
(3-2) 構成を[Debug] に設定し、[マルチスレッド デバッグ (/MTd)] を設定

(4) 以下のようにコードを書いてSHIFT + F5で実行してください。なお、Google-TestはWin64のものをダウンロードしているので、
プラットフォームは、x64環境でないと正しく動作しません。Google Testが正しく動作することを確認しました。

[コード]

#include "stdafx.h"
#include "gtest/gtest.h"


TEST(Test1, test1_1) {
    int num1 = 1;
    int num2 = 1;

    ASSERT_EQ(num1, num2);  // 成功する

    num2 = 2;

    ASSERT_EQ(num1, num2);  // 失敗する

}

[実行結果] f:id:nprogram:20180131061012p:plain

参考ページ

以下のページを参考にさせていただきました。ありがとうございます。 qiita.com