Skip to content

Commit a610d58

Browse files
committed
switch on modern CMake
Migrate on modern CMake (use target specific clauses instead of global ones). Also perform a trivial cleanup. Test: $ mkdir build $ cd build $ cmake .. $ make examples $ make tests $ make benchmarks Issue: saebyn#3 Signed-off-by: Gluttton <gluttton@ukr.net>
1 parent fea66da commit a610d58

File tree

9 files changed

+214
-267
lines changed

9 files changed

+214
-267
lines changed

.gitlab-ci.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ test_job:
1111
- BUILD_DIR=`pwd`/build
1212
- mkdir -p ${BUILD_DIR}
1313
- cd ${BUILD_DIR}
14-
- cmake -DCMAKE_BUILD_TYPE=Debug -DMUNKRESCPP_DEVEL_MODE=ON ${BUILD_DIR}/..
14+
- cmake -DCMAKE_BUILD_TYPE=Debug ${BUILD_DIR}/..
1515
script:
1616
- make tests
1717
- cd ${BUILD_DIR}/tests && ./munkrestest
@@ -46,19 +46,19 @@ benchmarks_job:
4646
- mkdir -p ${BUILD_DIR}
4747
- cd ${BUILD_DIR}
4848
script:
49-
- cmake -DCMAKE_BUILD_TYPE=Debug -DMUNKRESCPP_DEVEL_MODE=ON -DMUNKRES_CPP_MATRIX_TYPE=Matrix -DMUNKRES_CPP_VALUE_TYPE=long\ double ${BUILD_DIR}/..
49+
- cmake -DCMAKE_BUILD_TYPE=Debug -DMUNKRES_CPP_MATRIX_TYPE=Matrix -DMUNKRES_CPP_VALUE_TYPE=long\ double ${BUILD_DIR}/..
5050
- make benchmarks
5151
- rm -rf CMake*
52-
- cmake -DCMAKE_BUILD_TYPE=Debug -DMUNKRESCPP_DEVEL_MODE=ON -DMUNKRES_CPP_MATRIX_TYPE=matrix_armadillo -DMUNKRES_CPP_VALUE_TYPE=double ${BUILD_DIR}/..
52+
- cmake -DCMAKE_BUILD_TYPE=Debug -DMUNKRES_CPP_MATRIX_TYPE=matrix_armadillo -DMUNKRES_CPP_VALUE_TYPE=double ${BUILD_DIR}/..
5353
- make benchmarks
5454
- rm -rf CMake*
55-
- cmake -DCMAKE_BUILD_TYPE=Debug -DMUNKRESCPP_DEVEL_MODE=ON -DMUNKRES_CPP_MATRIX_TYPE=matrix_opencv -DMUNKRES_CPP_VALUE_TYPE=float ${BUILD_DIR}/..
55+
- cmake -DCMAKE_BUILD_TYPE=Debug -DMUNKRES_CPP_MATRIX_TYPE=matrix_opencv -DMUNKRES_CPP_VALUE_TYPE=float ${BUILD_DIR}/..
5656
- make benchmarks
5757
- rm -rf CMake*
58-
- cmake -DCMAKE_BUILD_TYPE=Debug -DMUNKRESCPP_DEVEL_MODE=ON -DMUNKRES_CPP_MATRIX_TYPE=matrix_boost -DMUNKRES_CPP_VALUE_TYPE=long\ unsigned\ int ${BUILD_DIR}/..
58+
- cmake -DCMAKE_BUILD_TYPE=Debug -DMUNKRES_CPP_MATRIX_TYPE=matrix_boost -DMUNKRES_CPP_VALUE_TYPE=long\ unsigned\ int ${BUILD_DIR}/..
5959
- make benchmarks
6060
- rm -rf CMake*
61-
- cmake -DCMAKE_BUILD_TYPE=Debug -DMUNKRESCPP_DEVEL_MODE=ON -DMUNKRES_CPP_MATRIX_TYPE=matrix_eigen -DMUNKRES_CPP_VALUE_TYPE=unsigned\ int ${BUILD_DIR}/..
61+
- cmake -DCMAKE_BUILD_TYPE=Debug -DMUNKRES_CPP_MATRIX_TYPE=matrix_eigen -DMUNKRES_CPP_VALUE_TYPE=unsigned\ int ${BUILD_DIR}/..
6262
- make benchmarks
6363
only:
6464
- devel

CMakeLists.txt

Lines changed: 11 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,23 @@
1-
# Common variables.
21
cmake_minimum_required (VERSION 3.1)
32
project (munkres-cpp)
43
set (munkres-cpp_VERSION_MAJOR 3)
54
set (munkres-cpp_VERSION_MINOR 0)
65

7-
set (CMAKE_CXX_STANDARD 11)
8-
set (CMAKE_CXX_STANDARD_REQUIRED ON)
9-
set (CMAKE_CXX_EXTENSIONS OFF)
10-
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
11-
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -O0 -ggdb3 -DDEBUG")
12-
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -O3")
6+
add_library (munkres-cpp INTERFACE)
7+
add_library (lp::munkres-cpp ALIAS munkres-cpp)
138

14-
15-
include_directories (${PROJECT_SOURCE_DIR}/src)
16-
17-
# Sources (nothing).
18-
set (
19-
MunkresCpp_SOURCES
9+
target_compile_features (munkres-cpp
10+
INTERFACE cxx_std_11
2011
)
2112

22-
# Headers.
23-
set (
24-
MunkresCpp_HEADERS
25-
${PROJECT_SOURCE_DIR}/src/munkres-cpp/matrix.h
26-
${PROJECT_SOURCE_DIR}/src/munkres-cpp/matrix_base.h
27-
${PROJECT_SOURCE_DIR}/src/munkres-cpp/utils.h
28-
${PROJECT_SOURCE_DIR}/src/munkres-cpp/munkres.h
29-
${PROJECT_SOURCE_DIR}/src/munkres-cpp/adapters/matrix_armadillo.h
30-
${PROJECT_SOURCE_DIR}/src/munkres-cpp/adapters/matrix_boost.h
31-
${PROJECT_SOURCE_DIR}/src/munkres-cpp/adapters/matrix_eigen.h
32-
${PROJECT_SOURCE_DIR}/src/munkres-cpp/adapters/matrix_opencv.h
33-
${PROJECT_SOURCE_DIR}/src/munkres-cpp/adapters/matrix_qt.h
34-
${PROJECT_SOURCE_DIR}/src/munkres-cpp/adapters/matrix_std_2d_vector.h
13+
target_include_directories (munkres-cpp
14+
INTERFACE ${PROJECT_SOURCE_DIR}/src
3515
)
3616

37-
# Library.
38-
add_library (
39-
munkres INTERFACE
17+
install (DIRECTORY ${PROJECT_SOURCE_DIR}/src/ DESTINATION include
18+
FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
4019
)
4120

42-
install (DIRECTORY ${PROJECT_SOURCE_DIR}/src/ DESTINATION include FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
43-
44-
45-
# Binary examples
46-
add_executable (example_01 EXCLUDE_FROM_ALL ${PROJECT_SOURCE_DIR}/examples/example_01.cpp)
47-
add_executable (example_02 EXCLUDE_FROM_ALL ${PROJECT_SOURCE_DIR}/examples/example_02.cpp)
48-
add_executable (example_03 EXCLUDE_FROM_ALL ${PROJECT_SOURCE_DIR}/examples/example_03.cpp)
49-
add_executable (example_04 EXCLUDE_FROM_ALL ${PROJECT_SOURCE_DIR}/examples/example_04.cpp)
50-
add_executable (example_05 EXCLUDE_FROM_ALL ${PROJECT_SOURCE_DIR}/examples/example_05.cpp)
51-
add_executable (example_06 EXCLUDE_FROM_ALL ${PROJECT_SOURCE_DIR}/examples/example_06.cpp)
52-
add_custom_target (examples)
53-
add_dependencies (
54-
examples
55-
example_01
56-
example_02
57-
example_03
58-
example_04
59-
example_05
60-
example_06
61-
)
62-
63-
64-
option (MUNKRESCPP_DEVEL_MODE "Configure project in development mode." OFF)
65-
if (MUNKRESCPP_DEVEL_MODE)
66-
# Enable the ExternalProject_Add directive.
67-
# Which used for getting external tools for the Project.
68-
include (ExternalProject)
69-
70-
71-
# Testing
72-
add_subdirectory (tests)
73-
74-
75-
# Benchmarking
76-
add_subdirectory (benchmarks)
77-
78-
79-
# Custom target to build everything.
80-
add_custom_target (full)
81-
add_dependencies (
82-
full
83-
munkres
84-
examples
85-
tests
86-
benchmarks
87-
)
88-
endif ()
21+
add_subdirectory (examples)
22+
add_subdirectory (tests)
23+
add_subdirectory (benchmarks)

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,17 +105,17 @@ Requirements:
105105

106106

107107

108-
For development purpose in the project implemented a variety of build targets.
108+
For development purpose in the project implemented several build targets.
109109
All of them help to continuously check correctness of algorithm implementation, performance, memory management, etc.
110-
To configure project in development mode ```-DMUNKRESCPP_DEVEL_MODE=ON``` option must be passed to CMake.
110+
To configure project in development mode checkout on ```devel``` branch.
111111

112112
Launch of unit tests.
113113
The project contains unit tests to build and launch it performs the following steps:
114114
```
115115
$ git clone https://github.com/saebyn/munkres-cpp.git
116116
$ cd munkres-cpp
117117
$ mkdir build && cd build
118-
$ cmake -DCMAKE_BUILD_TYPE=Debug -DMUNKRESCPP_DEVEL_MODE=ON ..
118+
$ cmake -DCMAKE_BUILD_TYPE=Debug ..
119119
$ make tests
120120
$ tests/munkrestest
121121
```
@@ -144,7 +144,7 @@ Buildning microbenchmarks:
144144
$ git clone https://github.com/saebyn/munkres-cpp.git
145145
$ cd munkres-cpp
146146
$ mkdir build && cd build
147-
$ cmake -DCMAKE_BUILD_TYPE=Release -DMUNKRESCPP_DEVEL_MODE=ON ..
147+
$ cmake -DCMAKE_BUILD_TYPE=Release ..
148148
$ make benchmarks
149149
```
150150
To get comparable results it's required to generate data set wich will be used for all benchmarks:

benchmarks/CMakeLists.txt

Lines changed: 62 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,24 @@ find_package (Boost COMPONENTS system)
33
find_package (Eigen3)
44
find_package (OpenCV COMPONENTS core)
55

6-
if (ARMADILLO_FOUND)
7-
add_definitions (-DMUNKRES_CPP_ARMADILLO)
8-
endif ()
9-
if (Boost_FOUND)
10-
add_definitions (-DMUNKRES_CPP_BOOST)
11-
endif ()
12-
if (EIGEN3_FOUND)
13-
add_definitions (-DMUNKRES_CPP_EIGEN3)
14-
endif ()
15-
if (OpenCV_FOUND)
16-
add_definitions (-DMUNKRES_CPP_OPENCV)
17-
set (CMAKE_EXE_LINKER_FLAGS "-l${OpenCV_LIBS}")
18-
endif ()
196

20-
include_directories (${OPENCV_INCLUDE_DIRS})
21-
include_directories (${ARMADILLO_INCLUDE_DIRS})
22-
include_directories (${EIGEN3_INCLUDE_DIR})
7+
# Benchmark based on the Celero Framework.
8+
include (ExternalProject)
9+
ExternalProject_Add (Celero
10+
GIT_REPOSITORY "https://github.com/DigitalInBlue/Celero.git"
11+
GIT_TAG "v2.8.2"
12+
PATCH_COMMAND eval "sed 's/CACHE.*FORCE//g' CMakeLists.txt > CMakeLists.mod && mv CMakeLists.mod CMakeLists.txt"
13+
CMAKE_ARGS "-DCELERO_ENABLE_EXPERIMENTS=OFF;-DCMAKE_BUILD_TYPE=Release"
14+
SOURCE_DIR "${PROJECT_BINARY_DIR}/Celero"
15+
BINARY_DIR "${PROJECT_BINARY_DIR}/CeleroBuild"
16+
INSTALL_COMMAND ""
17+
TEST_COMMAND ""
18+
)
19+
set_target_properties (Celero PROPERTIES EXCLUDE_FROM_ALL TRUE)
20+
set (CELERO_FOUND true)
21+
set (CELERO_INCLUDE_DIR "${PROJECT_BINARY_DIR}/Celero/include")
22+
set (CELERO_LIBRARY "${PROJECT_BINARY_DIR}/CeleroBuild/libcelero.so")
23+
2324

2425
if (NOT DEFINED MUNKRES_CPP_VALUE_TYPE)
2526
set (MUNKRES_CPP_VALUE_TYPE long\ unsigned\ int)
@@ -28,57 +29,64 @@ if (NOT DEFINED MUNKRES_CPP_MATRIX_TYPE)
2829
set (MUNKRES_CPP_MATRIX_TYPE matrix_eigen)
2930
endif ()
3031

31-
add_definitions (-DMUNKRES_CPP_VALUE_TYPE=${MUNKRES_CPP_VALUE_TYPE})
32-
add_definitions (-DMUNKRES_CPP_MATRIX_TYPE=${MUNKRES_CPP_MATRIX_TYPE})
33-
3432

3533
# Data generator.
36-
include_directories (${OpenCV_INCLUDE_DIRS})
37-
add_executable (
38-
generator EXCLUDE_FROM_ALL
34+
add_executable (generator EXCLUDE_FROM_ALL
3935
${CMAKE_CURRENT_SOURCE_DIR}/generator.cpp
4036
)
4137

38+
target_compile_definitions (generator
39+
PRIVATE MUNKRES_CPP_VALUE_TYPE=${MUNKRES_CPP_VALUE_TYPE}
40+
PRIVATE MUNKRES_CPP_MATRIX_TYPE=${MUNKRES_CPP_MATRIX_TYPE}
41+
)
4242

43-
# Benchmark based on the Celero Framework.
44-
ExternalProject_Add (
45-
Celero
46-
GIT_REPOSITORY "https://github.com/DigitalInBlue/Celero.git"
47-
GIT_TAG "v2.8.2"
48-
PATCH_COMMAND eval "sed 's/CACHE.*FORCE//g' CMakeLists.txt > CMakeLists.mod && mv CMakeLists.mod CMakeLists.txt"
49-
CMAKE_ARGS "-DCELERO_ENABLE_EXPERIMENTS=OFF;-DCMAKE_BUILD_TYPE=Release"
50-
SOURCE_DIR "${PROJECT_BINARY_DIR}/Celero"
51-
BINARY_DIR "${PROJECT_BINARY_DIR}/CeleroBuild"
52-
INSTALL_COMMAND ""
53-
TEST_COMMAND ""
43+
target_include_directories (generator
44+
PRIVATE ${CELERO_INCLUDE_DIR}
45+
PRIVATE ${ARMADILLO_INCLUDE_DIRS}
46+
PRIVATE ${EIGEN3_INCLUDE_DIR}
47+
PRIVATE ${OpenCV_INCLUDE_DIRS}
5448
)
55-
set_target_properties (Celero PROPERTIES EXCLUDE_FROM_ALL TRUE)
56-
set (CELERO_FOUND true)
57-
set (CELERO_INCLUDE_DIR "${PROJECT_BINARY_DIR}/Celero/include")
58-
set (CELERO_LIBRARY "${PROJECT_BINARY_DIR}/CeleroBuild/libcelero.so")
5949

60-
set (MunkresCppBenchmarkCelero_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/test.cpp)
61-
add_executable (munkresbenchmark EXCLUDE_FROM_ALL ${MunkresCppBenchmarkCelero_SOURCES})
62-
include_directories (${CELERO_INCLUDE_DIR})
63-
target_link_libraries (munkresbenchmark ${OpenCV_LIBS} ${CELERO_LIBRARY})
64-
add_dependencies (munkresbenchmark Celero)
50+
target_link_libraries (generator
51+
PRIVATE lp::munkres-cpp
52+
PRIVATE ${OpenCV_LIBS}
53+
)
6554

6655

67-
# Prevent launch tests before will be generated test data set.
68-
set (BenchmarkDataSet ${PROJECT_BINARY_DIR}/matrices.txt)
69-
add_custom_command (
70-
OUTPUT ${BenchmarkDataSet}
71-
COMMAND cd ${PROJECT_BINARY_DIR} && ./benchmarks/generator 20
56+
# Test.
57+
add_executable (munkresbenchmark
58+
EXCLUDE_FROM_ALL ${CMAKE_CURRENT_SOURCE_DIR}/test.cpp
7259
)
73-
add_custom_target (generate_benchmark_dataset DEPENDS ${BenchmarkDataSet})
74-
add_dependencies (generate_benchmark_dataset generator)
7560

76-
add_dependencies (munkresbenchmark generate_benchmark_dataset)
61+
target_compile_definitions (munkresbenchmark
62+
PRIVATE -DARMADILLO_FOUND=$<BOOL:${ARMADILLO_FOUND}>
63+
PRIVATE -DBOOST_FOUND=$<BOOL:${BOOST_FOUND}>
64+
PRIVATE -DEIGEN3_FOUND=$<BOOL:${EIGEN3_FOUND}>
65+
PRIVATE -DOPENCV_FOUND=$<BOOL:${OpenCV_FOUND}>
66+
PRIVATE -DQT5_FOUND=$<BOOL:${Qt5Gui_FOUND}>
67+
PRIVATE MUNKRES_CPP_VALUE_TYPE=${MUNKRES_CPP_VALUE_TYPE}
68+
PRIVATE MUNKRES_CPP_MATRIX_TYPE=${MUNKRES_CPP_MATRIX_TYPE}
69+
)
7770

71+
target_include_directories (munkresbenchmark
72+
PRIVATE ${CELERO_INCLUDE_DIR}
73+
PRIVATE ${ARMADILLO_INCLUDE_DIRS}
74+
PRIVATE ${EIGEN3_INCLUDE_DIR}
75+
PRIVATE ${OpenCV_INCLUDE_DIRS}
76+
)
7877

79-
add_custom_target (benchmarks)
80-
add_dependencies (
81-
benchmarks
82-
munkresbenchmark
78+
target_link_libraries (munkresbenchmark
79+
PRIVATE lp::munkres-cpp
80+
PRIVATE Boost::system
81+
PRIVATE ${OpenCV_LIBS}
82+
PRIVATE ${CELERO_LIBRARY}
83+
)
84+
85+
add_dependencies (munkresbenchmark Celero)
86+
87+
88+
add_custom_target (benchmarks)
89+
add_dependencies (benchmarks
8390
generator
91+
munkresbenchmark
8492
)

examples/CMakeLists.txt

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
add_executable (example_01
2+
EXCLUDE_FROM_ALL ${PROJECT_SOURCE_DIR}/examples/example_01.cpp
3+
)
4+
target_link_libraries (example_01
5+
PRIVATE lp::munkres-cpp
6+
)
7+
8+
add_executable (example_02
9+
EXCLUDE_FROM_ALL ${PROJECT_SOURCE_DIR}/examples/example_02.cpp
10+
)
11+
target_link_libraries (example_02
12+
PRIVATE lp::munkres-cpp
13+
)
14+
15+
find_package (Boost COMPONENTS system)
16+
add_executable (example_03
17+
EXCLUDE_FROM_ALL ${PROJECT_SOURCE_DIR}/examples/example_03.cpp
18+
)
19+
target_link_libraries (example_03
20+
PRIVATE lp::munkres-cpp
21+
PRIVATE Boost::system
22+
)
23+
24+
add_executable (example_04
25+
EXCLUDE_FROM_ALL ${PROJECT_SOURCE_DIR}/examples/example_04.cpp
26+
)
27+
target_link_libraries (example_04
28+
PRIVATE lp::munkres-cpp
29+
PRIVATE Boost::system
30+
)
31+
32+
add_executable (example_05
33+
EXCLUDE_FROM_ALL ${PROJECT_SOURCE_DIR}/examples/example_05.cpp
34+
)
35+
target_link_libraries (example_05
36+
PRIVATE lp::munkres-cpp
37+
PRIVATE Boost::system
38+
)
39+
40+
add_executable (example_06
41+
EXCLUDE_FROM_ALL ${PROJECT_SOURCE_DIR}/examples/example_06.cpp
42+
)
43+
target_link_libraries (example_06
44+
PRIVATE lp::munkres-cpp
45+
)
46+
47+
add_custom_target (examples)
48+
add_dependencies (examples
49+
example_01
50+
example_02
51+
example_03
52+
example_04
53+
example_05
54+
example_06
55+
)

0 commit comments

Comments
 (0)