ฉันกำลังพยายามจัดโครงสร้างโครงการของฉันเพื่อรวมแหล่งผลิต (ใน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 <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 .
ในโฟลเดอร์ราก แต่สิ่งนี้สร้างความยุ่งเหยิงด้วยไฟล์ชั่วคราวทุกที่ ฉันจะรับผลลัพธ์การรวบรวมในโครงสร้างที่เหมาะสมได้อย่างไร