-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
151 lines (123 loc) · 7.84 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
cmake_minimum_required(VERSION 3.18)
project(CppMLLibrary VERSION 1.0.0)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Option to build examples (enabled by default)
option(BUILD_EXAMPLES "Build examples" ON)
# Global include directories for headers
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/ml_library_include)
# Source files
file(GLOB_RECURSE SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
# Define the library target
add_library(cpp_ml_library STATIC ${SOURCES})
target_include_directories(cpp_ml_library PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/ml_library_include)
# Installation
install(TARGETS cpp_ml_library DESTINATION lib)
install(DIRECTORY ml_library_include/ DESTINATION include)
# Enable testing
enable_testing()
# Add individual test files as separate executables and define a macro for each
add_executable(LogisticRegressionTest tests/regression/LogisticRegressionTest.cpp)
target_compile_definitions(LogisticRegressionTest PRIVATE TEST_LOGISTIC_REGRESSION)
target_link_libraries(LogisticRegressionTest cpp_ml_library)
add_executable(PolynomialRegressionTest tests/regression/PolynomialRegressionTest.cpp)
target_compile_definitions(PolynomialRegressionTest PRIVATE TEST_POLYNOMIAL_REGRESSION)
target_link_libraries(PolynomialRegressionTest cpp_ml_library)
add_executable(MultiLinearRegressionTest tests/regression/MultilinearRegressionTest.cpp)
target_compile_definitions(MultiLinearRegressionTest PRIVATE TEST_MULTILINEAR_REGRESSION)
target_link_libraries(MultiLinearRegressionTest cpp_ml_library)
add_executable(DecisionTreeRegressor tests/tree/DecisionTreeRegressorTest.cpp)
target_compile_definitions(DecisionTreeRegressor PRIVATE TEST_DECISION_TREE_REGRESSION)
target_link_libraries(DecisionTreeRegressor cpp_ml_library)
add_executable(RandomForestRegressor tests/tree/RandomForestRegressorTest.cpp)
target_compile_definitions(RandomForestRegressor PRIVATE TEST_RANDOM_FOREST_REGRESSION)
target_link_libraries(RandomForestRegressor cpp_ml_library)
add_executable(DecisionTreeClassifier tests/tree/DecisionTreeClassifierTest.cpp)
target_compile_definitions(DecisionTreeClassifier PRIVATE TEST_DECISION_TREE_CLASSIFIER)
target_link_libraries(DecisionTreeClassifier cpp_ml_library)
add_executable(RandomForestClassifier tests/tree/RandomForestClassifierTest.cpp)
target_compile_definitions(RandomForestClassifier PRIVATE TEST_RANDOM_FOREST_CLASSIFIER)
target_link_libraries(RandomForestClassifier cpp_ml_library)
add_executable(KMeansClustering tests/clustering/KMeansClusteringTest.cpp)
target_compile_definitions(KMeansClustering PRIVATE TEST_KMEANS_CLUSTERING)
target_link_libraries(KMeansClustering cpp_ml_library)
add_executable(KNNClassifier tests/clustering/KNNClassifierTest.cpp)
target_compile_definitions(KNNClassifier PRIVATE TEST_KKN_CLASSIFIER)
target_link_libraries(KNNClassifier cpp_ml_library)
add_executable(KNNRegressor tests/clustering/KNNRegressorTest.cpp)
target_compile_definitions(KNNRegressor PRIVATE TEST_KNN_REGRESSOR)
target_link_libraries(KNNRegressor cpp_ml_library)
add_executable(HierarchicalClustering tests/clustering/HierarchicalClusteringTest.cpp)
target_compile_definitions(HierarchicalClustering PRIVATE TEST_HIERARCHICAL_CLUSTERING)
target_link_libraries(HierarchicalClustering cpp_ml_library)
add_executable(SupportVectorRegression tests/regression/SupportVectorRegressionTest.cpp)
target_compile_definitions(SupportVectorRegression PRIVATE TEST_SUPPORT_VECTOR_REGRESSION)
target_link_libraries(SupportVectorRegression cpp_ml_library)
add_executable(NeuralNetwork tests/neural_network/NeuralNetworkTest.cpp)
target_compile_definitions(NeuralNetwork PRIVATE TEST_NEURAL_NETWORK)
target_link_libraries(NeuralNetwork cpp_ml_library)
add_executable(Apriori tests/association/AprioriTest.cpp)
target_compile_definitions(Apriori PRIVATE TEST_APRIORI)
target_link_libraries(Apriori cpp_ml_library)
add_executable(Eclat tests/association/EclatTest.cpp)
target_compile_definitions(Eclat PRIVATE TEST_ECLAT)
target_link_libraries(Eclat cpp_ml_library)
# Register individual tests
add_test(NAME LogisticRegressionTest COMMAND LogisticRegressionTest)
add_test(NAME PolynomialRegressionTest COMMAND PolynomialRegressionTest)
add_test(NAME MultiLinearRegressionTest COMMAND MultiLinearRegressionTest)
add_test(NAME DecisionTreeRegressor COMMAND DecisionTreeRegressor)
add_test(NAME RandomForestRegressor COMMAND RandomForestRegressor)
add_test(NAME DecisionTreeClassifier COMMAND DecisionTreeClassifier)
add_test(NAME RandomForestClassifier COMMAND RandomForestClassifier)
add_test(NAME KMeansClustering COMMAND KMeansClustering)
add_test(NAME KNNClassifier COMMAND KNNClassifier)
add_test(NAME KNNRegressor COMMAND KNNRegressor)
add_test(NAME HierarchicalClustering COMMAND HierarchicalClustering)
add_test(NAME SupportVectorRegression COMMAND SupportVectorRegression)
add_test(NAME NeuralNetwork COMMAND NeuralNetwork)
add_test(NAME Apriori COMMAND Apriori)
add_test(NAME Eclat COMMAND Eclat)
# Add example executables if BUILD_EXAMPLES is ON
if(BUILD_EXAMPLES)
file(GLOB_RECURSE EXAMPLE_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/examples/*.cpp")
foreach(EXAMPLE_SOURCE ${EXAMPLE_SOURCES})
get_filename_component(EXAMPLE_NAME ${EXAMPLE_SOURCE} NAME_WE)
set(EXAMPLE_TARGET "example_${EXAMPLE_NAME}") # Add a prefix to the executable name
add_executable(${EXAMPLE_TARGET} ${EXAMPLE_SOURCE}) # Use prefixed name for executable
target_link_libraries(${EXAMPLE_TARGET} cpp_ml_library)
target_include_directories(${EXAMPLE_TARGET} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/ml_library_include)
# Define specific macros to control main() inclusion if necessary
if(EXAMPLE_NAME STREQUAL "LogisticRegressionExample")
target_compile_definitions(${EXAMPLE_TARGET} PRIVATE TEST_LOGISTIC_REGRESSION)
elseif(EXAMPLE_NAME STREQUAL "MultilinearRegressionExample")
target_compile_definitions(${EXAMPLE_TARGET} PRIVATE TEST_MULTILINEAR_REGRESSION)
elseif(EXAMPLE_NAME STREQUAL "PolynomialRegressionExample")
target_compile_definitions(${EXAMPLE_TARGET} PRIVATE TEST_POLYNOMIAL_REGRESSION)
elseif(EXAMPLE_NAME STREQUAL "DecisionTreeExample")
target_compile_definitions(${EXAMPLE_TARGET} PRIVATE TEST_DECISION_TREE_REGRESSION)
elseif(EXAMPLE_NAME STREQUAL "RandomForestExample")
target_compile_definitions(${EXAMPLE_TARGET} PRIVATE TEST_RANDOM_FOREST_REGRESSION)
elseif(EXAMPLE_NAME STREQUAL "DecisionTreeClassifierExample")
target_compile_definitions(${EXAMPLE_TARGET} PRIVATE TEST_DECISION_TREE_CLASSIFIER)
elseif(EXAMPLE_NAME STREQUAL "RandomForestClassifierExample")
target_compile_definitions(${EXAMPLE_TARGET} PRIVATE TEST_RANDOM_FOREST_CLASSIFIER)
elseif(EXAMPLE_NAME STREQUAL "KMeansExample")
target_compile_definitions(${EXAMPLE_TARGET} PRIVATE TEST_KMEANS_CLUSTERING)
elseif(EXAMPLE_NAME STREQUAL "KNNClassifierExample")
target_compile_definitions(${EXAMPLE_TARGET} PRIVATE TEST_KKN_CLASSIFIER)
elseif(EXAMPLE_NAME STREQUAL "KNNRegressorExample")
target_compile_definitions(${EXAMPLE_TARGET} PRIVATE TEST_KNN_REGRESSOR)
elseif(EXAMPLE_NAME STREQUAL "HierarchicalClusteringExample")
target_compile_definitions(${EXAMPLE_TARGET} PRIVATE TEST_HIERARCHICAL_CLUSTERING)
elseif(EXAMPLE_NAME STREQUAL "SupportVectorRegressionExample")
target_compile_definitions(${EXAMPLE_TARGET} PRIVATE TEST_SUPPORT_VECTOR_REGRESSION)
elseif(EXAMPLE_NAME STREQUAL "NeuralNetworkExample")
target_compile_definitions(${EXAMPLE_TARGET} PRIVATE TEST_NEURAL_NETWORK)
elseif(EXAMPLE_NAME STREQUAL "AprioriExample")
target_compile_definitions(${EXAMPLE_TARGET} PRIVATE TEST_APRIORI)
elseif(EXAMPLE_NAME STREQUAL "EclatExample")
target_compile_definitions(${EXAMPLE_TARGET} PRIVATE TEST_ECLAT)
endif()
endforeach()
endif()