diff options
Diffstat (limited to 'src/CMakeLists.txt')
| -rw-r--r-- | src/CMakeLists.txt | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2db46c60..cfb6ff16 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -191,38 +191,53 @@ foreach (f ${NNG_SOURCES}) source_group ("${SRC_GROUP}" FILES ${f}) endforeach () -# Static libary -add_library (${PROJECT_NAME}_static STATIC ${NNG_SOURCES}) -target_compile_definitions(${PROJECT_NAME}_static PUBLIC -DNNG_STATIC_LIB) - -# Shared library -add_library (${PROJECT_NAME} SHARED ${NNG_SOURCES}) -target_compile_definitions(${PROJECT_NAME} PRIVATE -DNNG_SHARED_LIB) +# Library +add_library (${PROJECT_NAME} ${NNG_SOURCES}) + +# When building shared libraries we prefer to suppress default symbol +# visibility, so that only the symbols that should be exposed in the +# resulting library are. This is the default with Windows. +if (BUILD_SHARED_LIBS) + target_compile_definitions(${PROJECT_NAME} PRIVATE -DNNG_SHARED_LIB) + if (NNG_HIDDEN_VISIBILITY) + target_compile_definitions(${PROJECT_NAME} PRIVATE -DNNG_HIDDEN_VISIBILITY) + set_target_properties(${PROJECT_NAME} PROPERTIES C_VISIBILITY_PRESET hidden) + endif() +else() + target_compile_definitions(${PROJECT_NAME} PUBLIC -DNNG_STATIC_LIB) +endif() set_target_properties (${PROJECT_NAME} - PROPERTIES SOVERSION "${NNG_ABI_VERSION}") + PROPERTIES SOVERSION ${NNG_ABI_SOVERSION} VERSION "${NNG_ABI_VERSION}") # Set library outputs same as top-level project binary outputs -set_target_properties (${PROJECT_NAME} ${PROJECT_NAME}_static +set_target_properties (${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) -set_target_properties (${PROJECT_NAME} ${PROJECT_NAME}_static +set_target_properties (${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) -set_target_properties (${PROJECT_NAME} ${PROJECT_NAME}_static +set_target_properties (${PROJECT_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) -set_target_properties (${PROJECT_NAME} ${PROJECT_NAME}_static +set_target_properties (${PROJECT_NAME} ${PROJECT_NAME} PROPERTIES FRAMEWORK OFF) -target_link_libraries (${PROJECT_NAME} ${NNG_REQUIRED_LIBRARIES}) -target_link_libraries (${PROJECT_NAME} Threads::Threads) +target_link_libraries (${PROJECT_NAME} PRIVATE ${NNG_REQUIRED_LIBRARIES}) +target_link_libraries (${PROJECT_NAME} PRIVATE Threads::Threads) -install (TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_static +install (TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}-target FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT tools ) +install (EXPORT ${PROJECT_NAME}-target + FILE ${PROJECT_NAME}-config.cmake + NAMESPACE nng:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} +) + # Install the header files. It would be much better if we could use # the PUBLIC_HEADER facility, but it stupidly flattens the directories. foreach (f ${NNG_HEADERS}) |
