프로덕션 소스 ( 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을 사용하지만 실제로는 중요하지 않습니다
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));
}
몇 가지 질문 :
- 이 구조가 의미가 있습니까? 이 코드를 구성 할 때 모범 사례는 무엇입니까? (C #과 java에서 왔으며 어떤 의미에서는 더 쉽습니다)
- 파일의
src
폴더에서 모든 파일을 나열해야한다는 사실이 마음에 들지 않습니다test/CMakeLists.txt
. 이것이 라이브러리 프로젝트 인 경우 라이브러리를 링크하면됩니다. 다른 프로젝트의 모든 cpp 파일을 나열하지 않는 방법이 있습니까? - 라인 무엇
enable_testing()
과add_test(MyTest test)
일이? 효과가 없습니다. CMake (또는 CTest)에서 테스트를 실행하려면 어떻게해야합니까? - 지금까지는
cmake .
루트 폴더에서 방금 실행 했지만 임시 파일이 어디서나 엉망이되었습니다. 합리적인 구조로 컴파일 결과를 얻으려면 어떻게해야합니까?