SE1BAC - Laad TicTacToe in CLion

Deze tekst zal je in enkele stappen tonen hoe je het TicTacToe programma (te gebruiken in het Project Software Engineering) kunt laden in CLion. Het voorbeeld start van de eerste versie TicTacToe10 maar daaropvolgende versies zouden op een gelijkaardige manier geladen moeten worden.

Doel: Het ultieme doel van dit laadproces is het TicTacToe project op een dusdanige manier op te zetten dat er twee configuraties zijn ("Build Configurations"): (a) een "Release" versie waarin alleen het hoogstnaadzakelijke voor een demonstratie aan de spreekwoordelijke eindgebruiker; (b) een "Debug" versie met extraatjes die we gebruiken tijdens het ontwikkelproces (tests, debug, ...).

Stap 1: Compileer GTest

  • Het google test framework moet gecompileerd worden voor het platform waarop je werkt (MacOSX, Linux, Windows, ...). Dit doe je door eerst gtest te downloaden gtest-1.7.zip | gtest-1.6.zip ]. Het zip bestand moet uiteraard gedecompresseerd worden.
  • Open een terminal en navigeer naar de gtest map die uit het archief komt.
  • Voer vervolgens deze commando's uit om het framework te compileren:
    > ./configure
    > cmake .
    > make  
  • Dit zorgt ervoor dat de libraries libgtest.a en libgtest_main.a worden aangemaakt. Dit zijn de bestanden die we voor ons project nodig hebben, alsook de include map.
 

Stap 2: Voeg de GTest bestanden toe aan het project

  • Maak in je project een nieuwe map aan genaamd "gtest". Maak hierin nog een map aan genaamd "lib".  
  • Kopieer de libraries libgtest.a en libgtest_main.a naar de map "gtest/lib".
  • Kopieer de include map naar de map "gtest"
  • Uiteindelijk zouden we deze mappen-structuur moeten bekomen:
  • ./gtest:
    include
    lib
    
    ./gtest/include:
    gtest
    
    ./gtest/include/gtest:
    ...
    gtest.h
    ...
    
    ./gtest/lib:
    libgtest.a
    libgtest_main.a
    
  • Zorg dat je een versie van uitgepakte versie van een TicTacToe zip of tar file klaar staan hebt. In het voorbeeld hebben we versie 10 uitgepakt, ongeveer zoals hieronder, maar in latere versies zullen er ongetwijfeld meer bestanden uitgepakt worden.
    ./src:
    TicTacToe.cpp
    TicTacToe.h
    TicTacToeMain.cpp
    TicTacToeTests.cpp

Stap 3 - Pas de CMakeLists aan

  • Eens dat alle bestanden op de juiste plaats staan hoeven we enkel nog de CMakeLists.txt aan te passen. Je kan deze hier downloaden: 
  • CMakeLists.txt
  • Door deze CMakeLists.txt te gebruiken zal CLion automatisch twee run configurations maken: een 'ttt' die de Release versie bouwt en uitvoert, en een 'ttt_debug' die de Debug versie bouwt en uitvoert. 

 Stap 4 - Test en Demonstratie run

  1. We bouwen eerst de Debug configuratie.
  2. Het build proces zou naadloos moeten verlopen en in de console zou ongeveer het volgende moeten verschijnen.
    **** Build of configuration Debug for project TicTacToe ****
    
    make all 
    Building file: ../src/TicTacToe.cpp
    Invoking: GCC C++ Compiler
    g++ -I../../../workspace/gtest/include -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/TicTacToe.d" -MT"src/TicTacToe.d" -o "src/TicTacToe.o" "../src/TicTacToe.cpp"
    Finished building: ../src/TicTacToe.cpp
     
    Building file: ../src/TicTacToeTests.cpp
    Invoking: GCC C++ Compiler
    g++ -I../../../workspace/gtest/include -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/TicTacToeTests.d" -MT"src/TicTacToeTests.d" -o "src/TicTacToeTests.o" "../src/TicTacToeTests.cpp"
    Finished building: ../src/TicTacToeTests.cpp
     
    Building target: TicTacToe
    Invoking: MacOS X C++ Linker
    g++ -L../../../workspace/gtest/lib -o "TicTacToe"  ./src/TicTacToe.o ./src/TicTacToeTests.o   -lgtest -lgtest_main
    Finished building target: TicTacToe
     
    
    **** Build Finished ****
  3. Als we deze Debug versie laten lopen krijgen we normaal het volgende te zien in de console.
    [==========] Running 2 tests from 1 test case.
    [----------] Global test environment set-up.
    [----------] 2 tests from TicTactToeTest
    [ RUN      ] TicTactToeTest.DefaultConstructor
    [       OK ] TicTactToeTest.DefaultConstructor (0 ms)
    [ RUN      ] TicTactToeTest.HappyDay
    [       OK ] TicTactToeTest.HappyDay (0 ms)
    [----------] 2 tests from TicTactToeTest (0 ms total)
    
    [----------] Global test environment tear-down
    [==========] 2 tests from 1 test case ran. (0 ms total)
    [  PASSED  ] 2 tests.
    

    Alle tests zijn [PASSED] ... oef !

  4. Op dezelfde manier kunnen we nu de Release configuratie bouwen.
    **** Build of configuration Release for project TicTacToe ****
    
    make all 
    Building file: ../src/TicTacToe.cpp
    Invoking: GCC C++ Compiler
    g++ -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/TicTacToe.d" -MT"src/TicTacToe.d" -o "src/TicTacToe.o" "../src/TicTacToe.cpp"
    Finished building: ../src/TicTacToe.cpp
     
    Building file: ../src/TicTacToeMain.cpp
    Invoking: GCC C++ Compiler
    g++ -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/TicTacToeMain.d" -MT"src/TicTacToeMain.d" -o "src/TicTacToeMain.o" "../src/TicTacToeMain.cpp"
    Finished building: ../src/TicTacToeMain.cpp
     
    Building target: TicTacToe
    Invoking: MacOS X C++ Linker
    g++  -o "TicTacToe"  ./src/TicTacToe.o ./src/TicTacToeMain.o   
    Finished building target: TicTacToe
     
    
    **** Build Finished ****
    

    Ook nu worden alle .cpp bestanden gecompileerd naar hun respectievelijk .o bestanden; maar nu zonder de -I optie. Ook tijdens het linken wordt de -L optie en de bibliotheken -lgtest en -lgtest_main niet gebruikt.

  5. En zouden het volgende te zien moeten krijgen in de console.
    START: ttt.nrOfMoves() = 0
    END: ttt.nrOfMoves() = 9
    

    Dus zowel de Debug configuratie (= tests) als de Release configuratie (= demonstratie) geven een verschillend resultaat.