2015-03-05 17 views
5

Ich versuche CMake und Ninja als Build-System für mein Projekt zu konfigurieren. Außer der App selbst habe ich eine zusätzliche ausführbare Datei für Komponententests, die von gtest unterstützt werden. Ich dachte, es wäre nett, wenn sie automatisch ausgeführt würden, wenn sie gebaut würden. Hier ist, wie ich es gemacht:GTest Ausgabe hat keine Farben, wenn mit cmake + Ninja gebaut und automatisch

├── build 
└── source 
    ├── CMakeLists.txt 
    ├── main.cc 
    └── ut 
     ├── CMakeLists.txt 
     ├── gtest 
     │   ├── ... 
     └── ut.cc 

Quelle/CMakeLists.txt ...

cmake_minimum_required (VERSION 2.6) 
project (trial) 
add_subdirectory(ut) 
add_executable(trial main.cc) 

... und Quelle/ut/CMakeLists.txt:

add_subdirectory(gtest) 
include_directories ("gtest/include") 

add_executable(ut ut.cc) 
target_link_libraries(ut LINK_PUBLIC gtest_main) 

add_custom_target(run_uts 
        COMMAND ut 
        DEPENDS ut 
        WORKING_DIRECTORY ${CMAKE_PROJECT_DIR} 
       ) 
Jetzt

als ich bau es, dh:

cd build 
cmake -GNinja ../source 
ninja run_uts 

Es funktioniert gut, außer dass die Ausgabe ist farblos. Wenn ich die UT-Binärdatei von Hand laufen lasse, d. H. build/ut/ut, bekomme ich schöne grüne und rote Farben. Die Farben sind auch da, wenn ich Unix Makefiles als Generator für CMake benutze.

Da ich nur CMake lerne, gibt es etwas, das ich vermisst habe oder ist es ein Problem mit Ninja?

Antwort

7

Ich gehe davon aus, dass Ihr automatisierter Code eine ausführbare gtest ausführt und die Ausgabe in eine Datei leitet. Standardmäßig fügt gtest Farbsequenzen nur hinzu, wenn die Ausgabe an ein Terminal gesendet wird. Um es zu erzwingen, Farbsequenzen hinzuzufügen, die an eine Datei oder eine Pipe gesendet werden, führen Sie die ausführbare Testdatei mit --gtest_color=yesoption aus.

+1

Nun, tatsächlich bringt mein Code die Ausgabe direkt zum Terminal, aber Ihr Rat half trotzdem! Meine beste Vermutung ist, dass (nach diesem Thread: https://github.com/martine/ninja/issues/174) Ninja es hier zu einer Pipe bringt. Zumindest erklärt das, warum es mit Makefiles funktioniert. –