Skip to content

Commit 020c77e

Browse files
committed
Add shared lib target, rename static lib (fix #55)
Code using multiple copies of the static libraries in one process can cause problems due to multiple copies of the protobuffer libraries not interacting correctly. Change default target library to be a shared library, add static variant as _static, and use object libraries to optimize the building of the shared and _pic static libraries.
1 parent 379840a commit 020c77e

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

CMakeLists.txt

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,38 @@ set(OSI_PROTO_FILES
2525

2626
protobuf_generate_cpp(PROTO_SRCS PROTO_HEADERS ${OSI_PROTO_FILES})
2727

28-
add_library(${PROJECT_NAME} STATIC ${PROTO_SRCS} ${PROTO_HEADERS})
29-
target_include_directories(${PROJECT_NAME}
28+
add_library(${PROJECT_NAME}_static STATIC ${PROTO_SRCS} ${PROTO_HEADERS})
29+
target_include_directories(${PROJECT_NAME}_static
3030
PUBLIC
3131
${PROTOBUF_INCLUDE_DIR}
3232
${CMAKE_CURRENT_BINARY_DIR}
3333
)
34-
target_link_libraries(${PROJECT_NAME} PUBLIC ${PROTOBUF_LIBRARY})
34+
target_link_libraries(${PROJECT_NAME}_static PUBLIC ${PROTOBUF_LIBRARY})
35+
36+
37+
add_library(${PROJECT_NAME}_obj OBJECT ${PROTO_SRCS} ${PROTO_HEADERS})
38+
target_include_directories(${PROJECT_NAME}_obj
39+
PUBLIC
40+
${PROTOBUF_INCLUDE_DIR}
41+
${CMAKE_CURRENT_BINARY_DIR}
42+
)
43+
set_property(TARGET ${PROJECT_NAME}_obj PROPERTY POSITION_INDEPENDENT_CODE ON)
3544

3645

37-
add_library(${PROJECT_NAME}_pic STATIC ${PROTO_SRCS} ${PROTO_HEADERS})
46+
add_library(${PROJECT_NAME}_pic STATIC $<TARGET_OBJECTS:${PROJECT_NAME}_obj>)
3847
target_include_directories(${PROJECT_NAME}_pic
3948
PUBLIC
4049
${PROTOBUF_INCLUDE_DIR}
4150
${CMAKE_CURRENT_BINARY_DIR}
4251
)
4352
target_link_libraries(${PROJECT_NAME}_pic PUBLIC ${PROTOBUF_LIBRARY})
53+
set_property(TARGET ${PROJECT_NAME}_pic PROPERTY POSITION_INDEPENDENT_CODE ON)
4454

4555

46-
set_property(TARGET ${PROJECT_NAME}_pic PROPERTY POSITION_INDEPENDENT_CODE ON)
56+
add_library(${PROJECT_NAME} SHARED $<TARGET_OBJECTS:${PROJECT_NAME}_obj>)
57+
target_include_directories(${PROJECT_NAME}
58+
PUBLIC
59+
${PROTOBUF_INCLUDE_DIR}
60+
${CMAKE_CURRENT_BINARY_DIR}
61+
)
62+
target_link_libraries(${PROJECT_NAME} PUBLIC ${PROTOBUF_LIBRARY})

0 commit comments

Comments
 (0)