J'essaie de structurer mon projet pour inclure les sources de production (en src
) et les tests (dans le sous-dossier test
sous-dossier). J'utilise CMake pour le construire. Comme exemple minimal, j'ai les fichiers suivants :
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 - utilise sqr, n'a pas vraiment d'importance
test/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)
test/test.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));
}
Quelques questions :
- Cette structure a-t-elle un sens ? Quelles sont les meilleures pratiques pour structurer ce code ? (Je viens du C# et de Java, et c'est plus facile dans un sens).
- Je n'aime pas le fait que je doive énumérer tous les fichiers de la base de données de l'entreprise.
src
dans le dossiertest/CMakeLists.txt
fichier. S'il s'agissait d'un projet de bibliothèque, je me contenterais de lier la bibliothèque. Existe-t-il un moyen d'éviter de lister tous les fichiers cpp de l'autre projet ? - Quelles sont les lignes
enable_testing()
yadd_test(MyTest test)
à faire ? Je n'ai vu aucun effet. Comment puis-je exécuter les tests à partir de CMake (ou CTest) ? - Jusqu'à présent, je n'ai fait qu'exécuter
cmake .
dans le dossier racine, mais cela a créé un désordre avec des fichiers temporaires partout. Comment puis-je obtenir les résultats de la compilation dans une structure raisonnable ?