CMake: Projekt-Struktur mit unit-tests

Ich versuche, Struktur mein Projekt umfasst die Produktion Quellen (in src Unterordner) und tests (in test Unterordner). Ich bin mit CMake zu bauen. Als minimal-Beispiel habe ich die folgenden Dateien:

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 - verwendet sqr, ist eigentlich egal,

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));
}

Ein paar Fragen:

  1. Macht dieser Aufbau Sinn? Was sind die besten Praktiken bei der Strukturierung dieser code? (Ich komme von C# und java, und da ist es leichter, in einem gewissen Sinn)
  2. Ich weiß nicht, wie die Tatsache, dass ich die Liste aller Dateien von der src Ordner in der test/CMakeLists.txt - Datei. Wenn dies war ein Bibliothek-Projekt, ich würde einfach ein link in die Bibliothek. Gibt es eine Möglichkeit zu vermeiden, mit der Auflistung aller cpp-Dateien aus dem anderen Projekt?
  3. Was sind die Linien enable_testing() und add_test(MyTest test) tun? Ich habe nicht gesehen, keine Wirkung. Wie kann ich die tests von CMake (oder CTest)?
  4. So weit ich lief einfach cmake . im root-Ordner, aber dadurch entstand ein Durcheinander mit temporären Dateien überall. Wie bekomme ich die Zusammenstellung der Ergebnisse in einer vernünftigen Struktur?

InformationsquelleAutor der Frage Grzenio | 2013-01-21

Schreibe einen Kommentar