2017-09-27 3 views
0

Ich versuche ein CMake-Projekt zu erstellen, in dem ich Tests abhängig vom Build-Typ ausführen möchte. Zum Beispiel Wenn ich einen Leistungsaufbau mache, möchte ich Leistungstests usw. durchführen.ctest ruft keine typspezifischen Build-Tests auf

Ich fand, dass add_test den CONFIGURATIONS Parameter für diesen Zweck zur Verfügung stellt. Wenn ich jedoch einen Build-Typ zur Verfügung stelle, findet ctest keine Tests.

Hier ist eine minimalistische CMakeLists.txt Wiedergabe des Verhaltens.

project (test NONE) 
include (CTest) 

add_test (NAME test 
    CONFIGURATIONS Release 
  COMMAND cowsay) 

In Schale:

mkdir build 
cd build 
cmake -DCMAKE_BUILD_TYPE=Release ..  
cmake --build . 
ctest 

Ausgang:

Running tests...  
Test project /home/phil/cmaketest/build  
No tests were found!!! 

Wenn ich laufen

ctest -C Release 

ich das gewünschte Verhalten zu erhalten, dh der Test durchgeführt wird, aber ich würde lieber nicht muss die -C Release von Hand eingeben.

Mache ich hier etwas falsch oder ist dieses eingerückte Verhalten?

Antwort

1

Die add_test (... CONFIGURATIONS ...) ist genau für den Zweck später Tests für eine bestimmte Konfiguration mit ctest -C ... ausführen.

Also ja, das ist beabsichtigt. Die Schlussfolgerung ist, dass dies sowohl Build-Umgebungen mit einer einzigen als auch mit mehreren Konfigurationen auf die gleiche Weise unterstützt.

Wenn Sie nur Single-Konfiguration Umgebungen unterstützen möchten können Sie tun:

if (CMAKE_BUILD_TYPE MATCHES "Release") 
    add_test (
     NAME test 
     COMMAND cowsay 
    ) 
endif() 
+0

Das Merkwürdige dabei ist, dass die verschiedenen Tests verschiedenen Kompilierung/link-Flags in Build-Schritt müssen, aber ich kann so etwas tun Erstellen eines Release-Builds mit 'cmake -DCMAKE_BUILD_TYPE = Release ..; cmake --build .' und starten Sie dann einen Code-Coverage-Test mit 'ctest -C Coverage'. Dies sollte jedoch eindeutig nicht anerkannt werden. Aber mit meinem derzeitigen Setup gibt es nur sinnlose Ergebnisse. – user26756

Verwandte Themen