CMake: Struktura projektu z testami jednostkowymi

Próbuję ustrukturyzować mój projekt tak, aby zawierał źródła produkcji (wsrc podfolder) i testy (wtest podfolder). Używam CMake do zbudowania tego. Jako minimalny przykład mam następujące pliki:

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 - używa sqr, nie ma znaczenia

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

Kilka pytań:

Czy ta struktura ma sens? Jakie są najlepsze praktyki przy konstruowaniu tego kodu? (Pochodzę z C # i java, a tam w pewnym sensie jest łatwiej)Nie podoba mi się fakt, że muszę wymienić wszystkie pliki zsrc folder wtest/CMakeLists.txt plik. Gdyby to był projekt biblioteczny, po prostu łączyłbym bibliotekę. Czy istnieje sposób na uniknięcie wyświetlania wszystkich plików cpp z innego projektu?Jakie są linieenable_testing() iadd_test(MyTest test) robić? Nie widziałem żadnego efektu. Jak mogę uruchomić testy z CMake (lub CTest)?Do tej pory po prostu pobiegłemcmake . w folderze głównym, ale wszędzie tworzy się bałagan z plikami tymczasowymi. Jak mogę uzyskać kompilację w rozsądnej strukturze?

questionAnswers(2)

yourAnswerToTheQuestion