Estoy tratando de estructurar mi proyecto para incluir las fuentes de producción (en la srcsubcarpeta) y las pruebas (en la testsubcarpeta). 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
srccarpeta en eltest/CMakeLists.txtarchivo. 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?