プロダクションソース(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 .
、ルートフォルダーで実行しただけですが、これにより、一時ファイルがどこにでも散らかっています。コンパイル結果を合理的な構造で取得するにはどうすればよいですか?