En mi CMakeLists.txt tengo algo como esto:
set_property(TEST testX APPEND PROPERTY DEPENDS testY) set_property(TEST testX APPEND PROPERTY DEPENDS testZ)
Y quiero alguna forma de ejecutar testX
y todas sus dependencias automáticamente. Algo como:
ctest <options> testX
y como resultado, CTest ejecutará textY
, testZ
y testX
. ¿Hay alguna manera de hacer esto?
O, si es imposible ahora, ¿hay alguna forma de extraer información sobre las dependencias del directorio de compilación de CMake mediante un script?
Hasta donde yo sé, no hay una forma integrada de hacer esto.
La mejor manera que se me ocurre para lograr su objetivo es utilizar la propiedad LABELS
en las pruebas. Puede recuperar la lista de dependencias usando get_property
o get_test_property
y aplicar la misma etiqueta a testX
y cada una de sus pruebas dependientes:
get_test_property(testX DEPENDS DependenciesOfTestX) set_tests_properties(testX ${DependenciesOfTestX} PROPERTIES LABELS LabelX)
Luego puede decirle a CTest que solo ejecute pruebas con esa etiqueta:
ctest -L LabelX
Se agregó soporte para accesorios de prueba en CMake 3.7 y hacen exactamente lo que usted quiere. Su escenario particular se implementaría así:
set_property(TEST testX PROPERTY FIXTURES_REQUIRED Foo) set_property(TEST testY PROPERTY FIXTURES_SETUP Foo) set_property(TEST testZ PROPERTY FIXTURES_SETUP Foo)
Luego puede pedirle a ctest
que ejecute solo testX
y automáticamente agregará testY
y testZ
al conjunto de pruebas que se ejecutarán:
ctest -R testX
También garantizará que testX
solo se ejecute después de que se hayan aprobado testY
y testZ
. Si falla testY
o testZ
, se testX
. También se agregaron nuevas opciones -FS
, -FC
y -FA
a ctest
en CMake 3.9, que permiten controlar la adición automática de pruebas de configuración/limpieza de dispositivos en la línea de comandos de ctest
. Por ejemplo, para omitir temporalmente la adición de testY
al conjunto de prueba pero aún agregar automáticamente testZ
, se podría hacer esto:
ctest -R testX -FS testY
Las propiedades de los accesorios se describen en los documentos de CMake y el siguiente artículo cubre la función de accesorios de manera más completa:
https://crascit.com/2016/10/18/test-fixtures-with-cmake-ctest/