Estoy probando CTest en CMake para ejecutar automáticamente algunas de mis pruebas usando make test
target. El problema es que CMake no "entiende" que la prueba que estoy dispuesto a ejecutar tiene que ser construida ya que es parte del proyecto.
Así que estoy buscando una forma de especificar explícitamente esta dependencia.
dependencies
cmake
ctest
claf
fuente
fuente
check
objetivo y puedan colisionarDe hecho, hay una forma de utilizarlo
make test
. Debe definir la compilación del ejecutable de prueba como una de las pruebas y luego agregar dependencias entre las pruebas. Es decir:fuente
Utilizo una variante de la respuesta de richq. En el nivel superior
CMakeLists.txt
, agrego un objetivo personalizadobuild_and_test
, para construir y ejecutar todas las pruebas:En los diversos
CMakeLists.txt
archivos de subproyecto a continuacióntest/
, agrego cada ejecutable de prueba como una dependencia debuild_and_test
:Con este enfoque, solo necesito en
make build_and_test
lugar demake test
(omake all test
), y tiene la ventaja de crear solo código de prueba (y sus dependencias). Es una pena que no pueda usar el nombre del objetivotest
. En mi caso, no es tan malo porque tengo un script de nivel superior que depura y libera (y compila de forma cruzada) compilaciones fuera del árbol llamandocmake
y luegomake
, y se traducetest
enbuild_and_test
.Obviamente, las cosas de GTest no son necesarias. Simplemente uso / me gusta Google Test, y quería compartir un ejemplo completo de su uso con CMake / CTest. En mi humilde opinión, este enfoque también tiene la ventaja de permitirme usar
ctest -V
, que muestra el resultado de la prueba de Google mientras se ejecutan las pruebas:fuente
Si está tratando de emular
make check
, puede encontrar útil esta entrada de wiki:http://www.cmake.org/Wiki/CMakeEmulateMakeCheck
Acabo de comprobar que hace lo que dice con éxito (CMake 2.8.10).
fuente
make check
. Para pruebas con tiempos de compilación dominantes, esto esctest -R
inútil.Ahórrese el dolor de cabeza:
Funciona de fábrica para mí y creará dependencias antes de ejecutar la prueba. Dado lo simple que es, casi hace que la
make test
funcionalidad nativa sea conveniente porque le da la opción de ejecutar las últimas pruebas de compilación incluso si su código está roto.fuente
make -j4 all && make test
. Y también es inestable si se usa una herramienta de compilación que no es Make.Si está usando CMake> = 3.7, entonces el enfoque recomendado es usar accesorios :
Esto hace lo siguiente:
test
destino ejecutable construido a partir detest.cpp
test_build
"prueba" que ejecuta Cmake para construir el objetivotest
test_build
prueba como una tarea de configuración del accesoriotest_fixture
test
prueba que solo ejecute eltest
ejecutabletest
prueba para necesitar un accesoriotest_fixture
.Por lo tanto, cada vez que se
test
va a ejecutar una pruebatest_build
, primero se ejecuta la prueba , que genera el ejecutable necesario.fuente
$<CONFIG>
no se establece,--target
se convertirá en el argumento de--config
.$<CONFIG>
siempre no está vacío. Es una expresión generadora para el nombre de configuración: cmake.org/cmake/help/latest/manual/… De todos modos editaré la respuesta para envolverla entre comillas solo porque no hace ninguna diferencia.cmake
? Hago de esta manera:mkdir build; cd build; cmake ..; make
. Y parece que no hay valores predeterminados y todas las variables relacionadas están vacías, hasta queCMAKE_BUILD_TYPE
se configura manualmente. (actualmente en Debian 10, no verifiqué otras plataformas)Esto es lo que resolví y he estado usando:
YMMV
fuente
La respuesta de Derrick, simplificada y comentada:
No es perfectamente correcto, ya que no resuelve el problema de concurrencia de ejecución
ninja all test
, en caso de que alguien lo haga. Al contrario, porque ahora tienes dos procesos ninja.(Ftr, también compartí esta solución aquí ).
fuente
Todas las respuestas anteriores son perfectas. Pero en realidad CMake usa CTest como sus herramientas de prueba, por lo que el método estándar (creo que lo es) para hacer la misión es:
Luego ejecute cmake y make para construir los objetivos. Después de eso, puede ejecutar make test o simplemente ejecutar
obtendrás el resultado. Esto se prueba en CMake 2.8.
Consulte los detalles en: http://cmake.org/Wiki/CMake/Testing_With_CTest#Simple_Testing
fuente
enable_testing()
,add_test()
, etc. El problema es que tiene que emitir manualmente el comando de construcción antes de ejecutar las pruebas. Quiere que elmake test
objetivo cree automáticamente los ejecutables de prueba según sea necesario.Todas las respuestas son buenas, pero implican una violación de la tradición de ejecutar una prueba por comando
make test
. He hecho este truco:Esto significa que la prueba consiste en construir (opcionalmente) y ejecutar un destino ejecutable.
fuente
make
y pierde la función de CMake de generar scripts para otras herramientas de compilación.