11cmake_minimum_required (VERSION 3.10)
22
3- set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} )
4- set (CMAKE_PDB_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} )
5- set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} )
6- set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} )
7- set (EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )
3+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /bin)
4+
5+ # For multi-config generators like Visual Studio, set per-config output dir
6+ foreach (OUTPUTCONFIG IN LISTS CMAKE_CONFIGURATION_TYPES )
7+ string (TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG_UPPER)
8+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG_UPPER} ${CMAKE_BINARY_DIR} /bin/${OUTPUTCONFIG} )
9+ endforeach ()
810set (CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "" )
911
1012project (SMTPClient C CXX)
1113
14+ option (BUILD_SHARED_LIBS "Build using shared libraries" ON )
15+
16+
1217# Set project name
1318set (PROJECT_NAME "smtpclient" )
1419set (PROJECT_UNITTEST_NAME "smtpclient_unittests" )
@@ -119,7 +124,7 @@ if (WIN32)
119124 ICON "${PATH_TO_APPLICATION_ICON} "
120125 VERSION_MAJOR 1
121126 VERSION_MINOR 1
122- VERSION_PATCH 7
127+ VERSION_PATCH 9
123128 VERSION_REVISION ${BUILD_REVISION}
124129 )
125130endif ()
@@ -146,15 +151,23 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
146151 message (STATUS "Will use OpenSSL lib directory ${OPENSSL_LIBRARY_DIRECTORY} " )
147152 link_directories (${OPENSSL_LIBRARY_DIRECTORY} )
148153 message (STATUS "Will use OpenSSL libraries files ${OPENSSL_CRYPTO_LIBRARY} ${OPENSSL_SSL_LIBRARY} " )
149- add_library (${PROJECT_NAME} SHARED
154+ add_library (${PROJECT_NAME}
150155 ${PROJECT_SOURCE_FILES} ${VersionFilesOutputVariable} )
156+ set_target_properties (${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS} )
151157 add_definitions (-D_CRT_SECURE_NO_WARNINGS)
152158 add_compile_options (/EHsc)
153159 target_compile_options (${PROJECT_NAME} PRIVATE /W3 /WX)
154- target_compile_definitions (${PROJECT_NAME}
155- PRIVATE SMTPCLIENT_EXPORTS
156- INTERFACE NOMINMAX # avoid Win macro definition of min/max, use std one
157- INTERFACE _SCL_SECURE_NO_WARNINGS) # disable security-paranoia warning
160+ if (${BUILD_SHARED_LIBS} )
161+ target_compile_definitions (${PROJECT_NAME}
162+ PRIVATE SMTPCLIENT_EXPORTS
163+ INTERFACE NOMINMAX # avoid Win macro definition of min/max, use std one
164+ INTERFACE _SCL_SECURE_NO_WARNINGS) # disable security-paranoia warning
165+ else ()
166+ target_compile_definitions (${PROJECT_NAME}
167+ PRIVATE SMTPCLIENT_STATIC
168+ INTERFACE NOMINMAX # avoid Win macro definition of min/max, use std one
169+ INTERFACE _SCL_SECURE_NO_WARNINGS) # disable security-paranoia warning
170+ endif ()
158171 target_link_libraries (${PROJECT_NAME} Ws2_32 ${OPENSSL_CRYPTO_LIBRARY} ${OPENSSL_SSL_LIBRARY} crypt32 cryptui)
159172else ()
160173 #For other compiler create the library as a static library
@@ -254,7 +267,9 @@ if (BUILD_TESTING)
254267 ${TEST_SRC_PATH} /smtpclient_unittest.cpp
255268 ${TEST_SRC_PATH} /serveroptionsanalyzer_unittest.cpp
256269 ${TEST_SRC_PATH} /errorresolver_unittest.cpp)
257-
270+ if (DEFINED BUILD_SHARED_LIBS AND NOT BUILD_SHARED_LIBS )
271+ target_compile_definitions (${PROJECT_UNITTEST_NAME} PRIVATE SMTPCLIENT_STATIC)
272+ endif ()
258273 target_link_libraries (${PROJECT_UNITTEST_NAME} ${PROJECT_NAME} gtest gtest_main ${PTHREAD} )
259274 gtest_discover_tests(${PROJECT_UNITTEST_NAME} )
260275endif ()
@@ -272,6 +287,7 @@ ADD_CUSTOM_TARGET(uninstall
272287 "${CMAKE_COMMAND} " -P "${CMAKE_CURRENT_BINARY_DIR} /cmake/CMakeUninstall.cmake" )
273288
274289if (EXISTS ${PROJECT_PATH} /simpleclient AND IS_DIRECTORY ${PROJECT_PATH} /simpleclient)
290+ set (BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS} CACHE BOOL "Build shared libs" FORCE)
275291 add_subdirectory (${PROJECT_PATH} /simpleclient)
276292endif ()
277293
0 commit comments