CMake: структура проекта с юнит-тестами

Я пытаюсь структурировать свой проект, чтобы включить источники производства (вsrc подпапка) и тесты (вtest вложенная папка). Я использую CMake, чтобы построить это. В качестве минимального примера у меня есть следующие файлы:

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 - использует sqr, не делаетэто действительно важно

тест / 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.cpp:

#define BOOST_TEST_MODULE SqrTests
#include 

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

Несколько вопросов:

Имеет ли эта структура смысл? Каковы лучшие практики при структурировании этого кода? (Я иду из C # и Java, и там это в некотором смысле легче)Я неМне нравится тот факт, что я должен перечислить все файлы изsrc папка вtest/CMakeLists.txt файл. Если бы это был проект библиотеки, я бы просто связал библиотеку. Есть ли способ избежать перечисления всех файлов cpp из другого проекта?Какие линииenable_testing() а такжеadd_test(MyTest test) делать? У меня нетне видел никакого эффекта. Как я могу запустить тесты из CMake (или CTest)?Пока я только что побежалcmake . в корневой папке, но это создало беспорядок с временными файлами везде. Как я могу получить результаты компиляции в разумной структуре?

Ответы на вопрос(2)

Ваш ответ на вопрос