2016-09-21 1 views
2

Ich baue eine Test-ausführbare Datei mit CMake. Während des Buildprozesses möchte ich die ausführbare Datei ausführen, die zurückgibt, ob die Tests erfolgreich sind oder nicht. Wenn nicht, möchte ich, dass der Build fehlschlägt. Wenn ich jedoch add_custom_command(... POST_BUILD ...) verwende und einen Makefile Generator verwende, wird die ausführbare Testdatei gelöscht (erklären Sie in dieser Frage: Why does GNU make delete a file).cmake add_custom_command Fehler, Ziel wird gelöscht

Gibt es eine Möglichkeit, CMake die ausführbare Datei als .PRECIOUS behandeln zu lassen oder die CMakeLists.txt anderweitig zu ändern, damit die ausführbare Datei nicht gelöscht wird, wenn die Tests fehlschlagen?

Als Referenz mein CMakeList.txt sieht wie folgt aus (von den tatsächlichen vereinfacht):

add_executable(UnitTest unittest.cpp) 
add_custom_command(TARGET UnitTest POST_BUILD COMMAND $<TARGET_FILE:UnitTest>) 
+1

Sie könnten die ausführbare Datei woanders kopieren, wo CMake sie nicht löscht. – AndyG

+0

Ist es in Ordnung, wenn der Test bei jedem Build ausgeführt wird, selbst wenn es vorher erfolgreich war oder sich die ausführbare Datei und ihre Abhängigkeiten nicht geändert haben? –

+0

@Florian: Gegebene Frage sagt explizit, dass "Ich möchte, dass der Build fehlschlägt." Also ist das Ignorieren des Fehlers nicht geeignet für den Fragesteller. Die Frage, auf die Sie als Duplikat verweisen, funktioniert auch auf der Stufe der Konfiguration ("cmake"), die Frage wird auf der Stufe build ('make') ausgeführt. – Tsyvarev

Antwort

1

Die Lösung, die ich anspielen wurde war add_custom_target statt add_custom_command zu verwenden. Obwohl die ausführbare Datei nicht gelöscht wird, wenn der Test fehlschlägt und der Build-Prozess als Ganzes fehlschlägt, wenn runUnitTest fehlschlägt, wird dieses Ziel nicht als Ergebnis der zielgerichteten Erstellung des UnitTest-Ziels erstellt.

add_executable(UnitTest unittest.cpp) 
add_custom_target(runUnitTest UnitTest COMMAND $<TARGET_FILE:UnitTest> DEPENDS UnitTest) 
Verwandte Themen