Skip to content

Commit d16e7f1

Browse files
committed
Overhaul build system
1 parent eaac352 commit d16e7f1

File tree

5 files changed

+94
-29
lines changed

5 files changed

+94
-29
lines changed

CMakeLists.txt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,30 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
1717

1818
add_subdirectory(ulog_cpp)
1919

20+
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
21+
2022
if(MAIN_PROJECT)
23+
include(CMakePackageConfigHelpers)
24+
25+
write_basic_package_version_file(
26+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
27+
VERSION 1.0.0
28+
COMPATIBILITY AnyNewerVersion
29+
)
30+
31+
configure_package_config_file(
32+
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in"
33+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
34+
INSTALL_DESTINATION lib/cmake/${PROJECT_NAME}
35+
)
36+
37+
install(FILES
38+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
39+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
40+
DESTINATION lib/cmake/${PROJECT_NAME}
41+
)
42+
43+
2144
add_compile_options(
2245
# Warnings
2346
-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 & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,44 @@
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
12-
GIT_REPOSITORY "https://github.com/doctest/doctest.git"
13-
GIT_TAG "v2.4.11"
14-
${SYSTEM_ARG}
15-
)
16-
178

18-
FetchContent_MakeAvailable(DocTest)
9+
find_package(doctest CONFIG)
1910

11+
if(NOT doctest_FOUND)
12+
include(FetchContent)
13+
FetchContent_Declare(
14+
doctest
15+
GIT_REPOSITORY "https://github.com/doctest/doctest.git"
16+
GIT_TAG "v2.4.11"
17+
)
18+
FetchContent_MakeAvailable(doctest)
19+
endif()
2020

2121
add_executable(tests
22-
main.cpp
23-
ulog_parsing_test.cpp
24-
read_api_test.cpp
22+
main.cpp
23+
ulog_parsing_test.cpp
24+
read_api_test.cpp
2525
)
2626

2727
target_link_libraries(tests PUBLIC
28-
doctest::doctest
29-
ulog_cpp::ulog_cpp
28+
doctest::doctest
29+
ulog_cpp::ulog_cpp
3030
)
3131

32+
add_dependencies(tests ulog_cpp)
33+
3234
add_custom_target(
3335
run-unit-tests
3436
COMMAND $<TARGET_FILE:tests>
3537
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
3638
USES_TERMINAL
3739
)
40+
41+
add_dependencies(run-unit-tests tests)
42+
43+
enable_testing()
44+
add_test(NAME unit-tests COMMAND tests)

ulog_cpp/CMakeLists.txt

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,42 @@
1+
if(BUILD_SHARED_LIBS)
2+
add_library(${PROJECT_NAME} SHARED
3+
data_container.cpp
4+
messages.cpp
5+
reader.cpp
6+
writer.cpp
7+
simple_writer.cpp
8+
)
9+
else()
10+
add_library(${PROJECT_NAME} STATIC
11+
data_container.cpp
12+
messages.cpp
13+
reader.cpp
14+
writer.cpp
15+
simple_writer.cpp
16+
)
17+
endif()
18+
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
119

2-
add_library(${PROJECT_NAME}
3-
data_container.cpp
4-
messages.cpp
5-
reader.cpp
6-
writer.cpp
7-
simple_writer.cpp
20+
target_include_directories(${PROJECT_NAME}
21+
PUBLIC
22+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
23+
$<INSTALL_INTERFACE:include/ulog_cpp>
24+
)
25+
26+
install(TARGETS ${PROJECT_NAME}
27+
EXPORT ${PROJECT_NAME}Targets
28+
ARCHIVE DESTINATION lib
29+
LIBRARY DESTINATION lib
30+
RUNTIME DESTINATION bin
831
)
9-
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
1032

33+
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/
34+
DESTINATION include/ulog_cpp
35+
FILES_MATCHING PATTERN "*.hpp"
36+
)
37+
38+
install(EXPORT ${PROJECT_NAME}Targets
39+
FILE ${PROJECT_NAME}Targets.cmake
40+
NAMESPACE ${PROJECT_NAME}::
41+
DESTINATION lib/cmake/${PROJECT_NAME}
42+
)

0 commit comments

Comments
 (0)