मैं उत्पादन स्रोतों ( 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 # और जावा से आ रहा हूँ, और वहाँ एक अर्थ में आसान है)
- मुझे इस तथ्य को पसंद नहीं है कि मुझे फ़ाइल
src
में फ़ोल्डर से सभी फ़ाइलों को सूचीबद्ध करनाtest/CMakeLists.txt
है। यदि यह एक पुस्तकालय परियोजना थी, तो मैं सिर्फ पुस्तकालय को लिंक करूंगा। क्या अन्य परियोजना से सभी सीपीपी फ़ाइलों को सूचीबद्ध करने से बचने का कोई तरीका है? - रेखाएँ
enable_testing()
औरadd_test(MyTest test)
क्या कर रही हैं? मैंने कोई प्रभाव नहीं देखा। मैं CMake (या CTest) से परीक्षण कैसे चला सकता हूं? - अभी तक मैं सिर्फ
cmake .
रूट फ़ोल्डर में भागता था, लेकिन इसने हर जगह अस्थायी फ़ाइलों के साथ एक गड़बड़ पैदा कर दी। मैं एक उचित संरचना में संकलन परिणाम कैसे प्राप्त कर सकता हूं?