Skip to content

Commit 21fec75

Browse files
committed
Use more modern CMake target-centered features
Signed-off-by: Pierre R. Mai <pmai@pmsf.de>
1 parent 814e8f0 commit 21fec75

File tree

2 files changed

+19
-17
lines changed

2 files changed

+19
-17
lines changed

CMakeLists.txt

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@ if(OSI_IS_TOP_LEVEL AND NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
1313
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
1414
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
1515
STRING "Choose the type of build." FORCE)
16+
set(CMAKE_CONFIGURATION_TYPES "Release;RelWithDebInfo;MinSizeRel;Debug" CACHE STRING "" FORCE)
1617
# Set the possible values of build type for cmake-gui
1718
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
18-
"Debug" "Release" "MinSizeRel" "RelWithDebInfo")
19+
"Release" "MinSizeRel" "RelWithDebInfo" "Debug")
1920
endif()
2021

2122
# read the version number from the file "VERSION"
@@ -40,6 +41,7 @@ project(
4041
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to be used")
4142
set(CMAKE_CXX_STANDARD_REQUIRED ON)
4243

44+
# Suppress protobuf code warnings for MSVC
4345
if(MSVC)
4446
add_compile_options(/wd4141 /wd4244 /wd4251 /wd4267 /wd4305 /wd4355 /wd4800 /wd4996)
4547
endif()
@@ -64,16 +66,18 @@ set(OSI_INSTALL_INCLUDE_DIR ${OSI_INSTALL_INCLUDE_DIR}/osi${VERSION_MAJOR})
6466
configure_file(open-simulation-interface/osi_version.proto.in osi_version.proto)
6567

6668
find_package(Protobuf REQUIRED)
67-
include_directories(${Protobuf_INCLUDE_DIRS})
6869

6970
file(GLOB OSI_PROTO_FILES open-simulation-interface/*.proto)
7071
list(INSERT OSI_PROTO_FILES 0 ${CMAKE_CURRENT_BINARY_DIR}/osi_version.proto)
7172

7273
protobuf_generate_cpp(PROTO_SRCS PROTO_HEADERS ${OSI_PROTO_FILES})
7374

75+
# Static library
7476
add_library(${PROJECT_NAME}_static STATIC ${PROTO_SRCS} ${PROTO_HEADERS})
7577
add_library(${PROJECT_NAME}::${PROJECT_NAME}_static ALIAS ${PROJECT_NAME}_static)
7678
target_include_directories(${PROJECT_NAME}_static
79+
PRIVATE
80+
${Protobuf_INCLUDE_DIRS}
7781
PUBLIC
7882
${PROTOBUF_INCLUDE_DIR}
7983
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
@@ -84,53 +88,50 @@ install(TARGETS ${PROJECT_NAME}_static
8488
EXPORT ${PROJECT_NAME}_targets
8589
ARCHIVE DESTINATION "${OSI_INSTALL_LIB_DIR}" COMPONENT lib)
8690

87-
91+
# Position independent object library for shared/pic libraries
8892
add_library(${PROJECT_NAME}_obj OBJECT ${PROTO_SRCS} ${PROTO_HEADERS})
8993
add_library(${PROJECT_NAME}::${PROJECT_NAME}_obj ALIAS ${PROJECT_NAME}_obj)
9094
target_include_directories(${PROJECT_NAME}_obj
95+
PRIVATE
96+
${Protobuf_INCLUDE_DIRS}
9197
PUBLIC
9298
${PROTOBUF_INCLUDE_DIR}
9399
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
94100
$<INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR}>
95101
)
96102
set_property(TARGET ${PROJECT_NAME}_obj PROPERTY POSITION_INDEPENDENT_CODE ON)
97103

98-
104+
# Static position independent code library for use in shared libraries
99105
add_library(${PROJECT_NAME}_pic STATIC $<TARGET_OBJECTS:${PROJECT_NAME}_obj>)
100106
add_library(${PROJECT_NAME}::${PROJECT_NAME}_pic ALIAS ${PROJECT_NAME}_pic)
101107
target_include_directories(${PROJECT_NAME}_pic
108+
PRIVATE
109+
${Protobuf_INCLUDE_DIRS}
102110
PUBLIC
103111
${PROTOBUF_INCLUDE_DIR}
104112
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
105113
$<INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR}>
106114
)
107115
target_link_libraries(${PROJECT_NAME}_pic PUBLIC protobuf::libprotobuf)
108-
109116
set_property(TARGET ${PROJECT_NAME}_pic PROPERTY POSITION_INDEPENDENT_CODE ON)
110-
111117
install(TARGETS ${PROJECT_NAME}_pic
112118
EXPORT ${PROJECT_NAME}_targets
113119
ARCHIVE DESTINATION "${OSI_INSTALL_LIB_DIR}" COMPONENT lib)
114120

121+
# Shared library
115122
add_library(${PROJECT_NAME} SHARED $<TARGET_OBJECTS:${PROJECT_NAME}_obj>)
116123
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
117124
target_include_directories(${PROJECT_NAME}
125+
PRIVATE
126+
${Protobuf_INCLUDE_DIRS}
118127
PUBLIC
119128
${PROTOBUF_INCLUDE_DIR}
120129
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
121130
$<INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR}>
122131
)
123-
124-
set_property(
125-
TARGET ${PROJECT_NAME}
126-
PROPERTY SOVERSION ${${PROJECT_NAME}_SOVERSION}
127-
)
128-
set_property(
129-
TARGET ${PROJECT_NAME}
130-
PROPERTY VERSION ${${PROJECT_NAME}_LIBVERSION}
131-
)
132-
133132
target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf)
133+
set_property(TARGET ${PROJECT_NAME} PROPERTY SOVERSION ${${PROJECT_NAME}_SOVERSION})
134+
set_property(TARGET ${PROJECT_NAME} PROPERTY VERSION ${${PROJECT_NAME}_LIBVERSION})
134135
install(TARGETS ${PROJECT_NAME}
135136
EXPORT ${PROJECT_NAME}_targets
136137
DESTINATION "${OSI_INSTALL_LIB_DIR}" COMPONENT lib)

CMakePresets.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323
},
2424
{
2525
"name": "vcpkg-windows",
26-
"configurePreset": "vcpkg-windows"
26+
"configurePreset": "vcpkg-windows",
27+
"configuration": "Release"
2728
}
2829
]
2930
}

0 commit comments

Comments
 (0)