Estoy tratando de estructurar mi proyecto para incluir las fuentes de producción (en la src
subcarpeta) y las pruebas (en la test
subcarpeta). Estoy usando CMake para construir esto. Como ejemplo mínimo, tengo los siguientes archivos:
CMakeLists.txt:
cmake_minimum_required (VERSION 2.8)
project (TEST)
add_subdirectory (src)
add_subdirectory (test)
src / CMakeLists.txt:
add_executable (demo main.cpp sqr.cpp)
src / sqr.h
#ifndef SQR_H
#define SQR_H
double sqr(double);
#endif // SQR_H
src / sqr.cpp
#include "sqr.h"
double sqr(double x) { return x*x; }
src / main.cpp: usa sqr, realmente no importa
prueba / CMakeLists.txt:
find_package(Boost COMPONENTS system filesystem unit_test_framework REQUIRED)
include_directories (${TEST_SOURCE_DIR}/src)
ADD_DEFINITIONS(-DBOOST_TEST_DYN_LINK)
add_executable (test test.cpp ${TEST_SOURCE_DIR}/src/sqr.cpp)
target_link_libraries(test
${Boost_FILESYSTEM_LIBRARY}
${Boost_SYSTEM_LIBRARY}
${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}
)
enable_testing()
add_test(MyTest test)
prueba / prueba.cpp:
#define BOOST_TEST_MODULE SqrTests
#include <boost/test/unit_test.hpp>
#include "sqr.h"
BOOST_AUTO_TEST_CASE(FailTest)
{
BOOST_CHECK_EQUAL(5, sqr(2));
}
BOOST_AUTO_TEST_CASE(PassTest)
{
BOOST_CHECK_EQUAL(4, sqr(2));
}
Unas cuantas preguntas:
- ¿Tiene sentido esta estructura? ¿Cuáles son las mejores prácticas al estructurar este código? (Vengo de C # y Java, y allí es más fácil en cierto sentido)
- No me gusta el hecho de que tengo que enumerar todos los archivos de la
src
carpeta en eltest/CMakeLists.txt
archivo. Si este fuera un proyecto de biblioteca, simplemente vincularía la biblioteca. ¿Hay alguna manera de evitar enumerar todos los archivos cpp del otro proyecto? - ¿Cuáles son las líneas
enable_testing()
yadd_test(MyTest test)
hacer? No he visto ningún efecto. ¿Cómo puedo ejecutar las pruebas de CMake (o CTest)? - Hasta ahora solo corrí
cmake .
en la carpeta raíz, pero esto creó un desastre con archivos temporales en todas partes. ¿Cómo puedo obtener los resultados de la compilación en una estructura razonable?