Skip to content

Commit c59c5ae

Browse files
committed
Overhaul build system
1 parent eaac352 commit c59c5ae

File tree

5 files changed

+82
-27
lines changed

5 files changed

+82
-27
lines changed

CMakeLists.txt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,27 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
1818
add_subdirectory(ulog_cpp)
1919

2020
if(MAIN_PROJECT)
21+
include(CMakePackageConfigHelpers)
22+
23+
write_basic_package_version_file(
24+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
25+
VERSION 1.0.0
26+
COMPATIBILITY AnyNewerVersion
27+
)
28+
29+
configure_package_config_file(
30+
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in"
31+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
32+
INSTALL_DESTINATION lib/cmake/${PROJECT_NAME}
33+
)
34+
35+
install(FILES
36+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
37+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
38+
DESTINATION lib/cmake/${PROJECT_NAME}
39+
)
40+
41+
2142
add_compile_options(
2243
# Warnings
2344
-Wall

cmake/ulog_cppConfig.cmake.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@PACKAGE_INIT@
2+
3+
include("${CMAKE_CURRENT_LIST_DIR}/ulog_cppTargets.cmake")

examples/CMakeLists.txt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
1+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/examples)
22

33
add_executable(ulog_info ulog_info.cpp)
44
target_link_libraries(ulog_info PUBLIC
5-
ulog_cpp::ulog_cpp
6-
)
5+
ulog_cpp::ulog_cpp
6+
)
77

88
add_executable(ulog_data ulog_data.cpp)
99
target_link_libraries(ulog_data PUBLIC
10-
ulog_cpp::ulog_cpp
11-
)
10+
ulog_cpp::ulog_cpp
11+
)
1212

1313
add_executable(ulog_writer ulog_writer.cpp)
1414
target_link_libraries(ulog_writer PUBLIC
15-
ulog_cpp::ulog_cpp
16-
)
15+
ulog_cpp::ulog_cpp
16+
)

test/CMakeLists.txt

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,45 @@
1-
2-
31
include(FetchContent)
42

53
set(SYSTEM_ARG SYSTEM)
64
# cmake < 3.25 fails with system attribute
75
if (CMAKE_VERSION VERSION_LESS "3.25")
86
set(SYSTEM_ARG "")
97
endif ()
10-
FetchContent_Declare(
11-
DocTest
8+
9+
find_package(doctest CONFIG)
10+
11+
if(NOT doctest_FOUND)
12+
include(FetchContent)
13+
FetchContent_Declare(
14+
doctest
1215
GIT_REPOSITORY "https://github.com/doctest/doctest.git"
1316
GIT_TAG "v2.4.11"
1417
${SYSTEM_ARG}
15-
)
16-
17-
18-
FetchContent_MakeAvailable(DocTest)
19-
18+
)
19+
FetchContent_MakeAvailable(doctest)
20+
endif()
2021

2122
add_executable(tests
22-
main.cpp
23-
ulog_parsing_test.cpp
24-
read_api_test.cpp
23+
main.cpp
24+
ulog_parsing_test.cpp
25+
read_api_test.cpp
2526
)
2627

2728
target_link_libraries(tests PUBLIC
28-
doctest::doctest
29-
ulog_cpp::ulog_cpp
29+
doctest::doctest
30+
ulog_cpp::ulog_cpp
3031
)
3132

33+
add_dependencies(tests ulog_cpp)
34+
3235
add_custom_target(
3336
run-unit-tests
3437
COMMAND $<TARGET_FILE:tests>
3538
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
3639
USES_TERMINAL
3740
)
41+
42+
add_dependencies(run-unit-tests tests)
43+
44+
enable_testing()
45+
add_test(NAME unit-tests COMMAND tests)

ulog_cpp/CMakeLists.txt

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,33 @@
1-
21
add_library(${PROJECT_NAME}
3-
data_container.cpp
4-
messages.cpp
5-
reader.cpp
6-
writer.cpp
7-
simple_writer.cpp
2+
data_container.cpp
3+
messages.cpp
4+
reader.cpp
5+
writer.cpp
6+
simple_writer.cpp
87
)
8+
99
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
1010

11+
target_include_directories(${PROJECT_NAME}
12+
PUBLIC
13+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
14+
$<INSTALL_INTERFACE:include/ulog_cpp>
15+
)
16+
17+
install(TARGETS ${PROJECT_NAME}
18+
EXPORT ${PROJECT_NAME}Targets
19+
ARCHIVE DESTINATION lib
20+
LIBRARY DESTINATION lib
21+
RUNTIME DESTINATION bin
22+
)
23+
24+
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/
25+
DESTINATION include/ulog_cpp
26+
FILES_MATCHING PATTERN "*.hpp"
27+
)
28+
29+
install(EXPORT ${PROJECT_NAME}Targets
30+
FILE ${PROJECT_NAME}Targets.cmake
31+
NAMESPACE ${PROJECT_NAME}::
32+
DESTINATION lib/cmake/${PROJECT_NAME}
33+
)

0 commit comments

Comments
 (0)