CMakeLists.txt 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. project(curlpp)
  2. # In response to CMake 3.0 generating warnings regarding policy CMP0042,
  3. # the OSX RPATH settings have been updated per recommendations found
  4. # in the CMake Wiki:
  5. # http://www.cmake.org/Wiki/CMake_RPATH_handling#Mac_OS_X_and_the_RPATH
  6. if(POLICY CMP0042)
  7. cmake_policy(SET CMP0042 NEW) # MACOSX_RPATH
  8. set(CMAKE_MACOSX_RPATH TRUE)
  9. endif()
  10. # for unix platform, define install directories.
  11. include(GNUInstallDirs)
  12. if(WIN32)
  13. # cmake 3.4 is required for CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS
  14. cmake_minimum_required(VERSION 3.4)
  15. # c++ 11 support from cmake 3.4 or newer
  16. set(CMAKE_CXX_STANDARD 11) # C++11...
  17. set(CMAKE_CXX_STANDARD_REQUIRED ON) #...is required...
  18. set(CMAKE_CXX_EXTENSIONS OFF) #...without compiler extensions like gnu++11
  19. set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
  20. else()
  21. if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_LESS 3.1)
  22. cmake_minimum_required(VERSION 2.8)
  23. # c++11 support for cmake 2.8.12 - 3.0.x
  24. #
  25. # for non-windows platform we try to keep cmake 2.8 support
  26. # since entreprise distribution tends to have 2.8 version.
  27. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  28. else()
  29. # c++ 11 support from cmake 3.1 or newer
  30. set(CMAKE_CXX_STANDARD 11) # C++11...
  31. set(CMAKE_CXX_STANDARD_REQUIRED ON) #...is required...
  32. set(CMAKE_CXX_EXTENSIONS OFF) #...without compiler extensions like gnu++11
  33. endif()
  34. endif()
  35. # Conan.io integration
  36. if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/conanbuildinfo.cmake)
  37. include(${CMAKE_CURRENT_SOURCE_DIR}/conanbuildinfo.cmake)
  38. conan_basic_setup()
  39. endif()
  40. # extra (pkg-config-related files)
  41. add_subdirectory(extras)
  42. #########################################################################################
  43. # Look for dependencies
  44. # Documented at https://cmake.org/cmake/help/v3.0/module/FindCURL.html?highlight=curlpp
  45. # Seems simple.
  46. message(STATUS "Looking for CURL")
  47. include(FindCURL)
  48. find_package(CURL REQUIRED)
  49. if(CURL_FOUND)
  50. message(STATUS "Found CURL version: ${CURL_VERSION_STRING}")
  51. message(STATUS "Using CURL include dir(s): ${CURL_INCLUDE_DIRS}")
  52. message(STATUS "Using CURL lib(s): ${CURL_LIBRARIES}")
  53. else()
  54. message(FATAL_ERROR "Could not find CURL")
  55. endif()
  56. # All following targets should search these directories for headers
  57. include_directories(
  58. ${CMAKE_CURRENT_SOURCE_DIR}/include
  59. ${CURL_INCLUDE_DIRS}
  60. )
  61. #########################################################################################
  62. # Define Targets
  63. # If building on windows, install path will be in build/winbuild
  64. if(CMAKE_SYSTEM MATCHES "Windows")
  65. if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
  66. set(CMAKE_INSTALL_PREFIX "winbuild")
  67. endif()
  68. endif()
  69. file(GLOB_RECURSE HeaderFileList "${CMAKE_CURRENT_SOURCE_DIR}/include/*")
  70. file(GLOB_RECURSE SourceFileList "${CMAKE_CURRENT_SOURCE_DIR}/src/*")
  71. add_library(${PROJECT_NAME} SHARED ${HeaderFileList} ${SourceFileList})
  72. target_link_libraries(${PROJECT_NAME} ${CURL_LIBRARIES} ${CONAN_LIBS})
  73. set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION 1 VERSION 1.0.0)
  74. add_library(${PROJECT_NAME}_static STATIC ${HeaderFileList} ${SourceFileList})
  75. # Make sure that on unix-platforms shared and static libraries have
  76. # the same root name, but different suffixes.
  77. #
  78. # (solution taken from https://cmake.org/Wiki/CMake_FAQ#How_do_I_make_my_shared_and_static_libraries_have_the_same_root_name.2C_but_different_suffixes.3F)
  79. #
  80. # Making shared and static libraries have the same root name, but different suffixes
  81. SET_TARGET_PROPERTIES(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
  82. # Now the library target "curlpp_static" will be named "curlpp.lib" with MS tools.
  83. # This conflicts with the "curlpp.lib" import library corresponding to "curlpp.dll",
  84. # so we add a "lib" prefix (which is default on other platforms anyway):
  85. SET_TARGET_PROPERTIES(${PROJECT_NAME}_static PROPERTIES PREFIX "lib")
  86. target_link_libraries(${PROJECT_NAME}_static ${CURL_LIBRARIES} ${CONAN_LIBS})
  87. # install headers
  88. install(DIRECTORY include/utilspp/ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/utilspp")
  89. install(DIRECTORY include/curlpp/ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/curlpp")
  90. install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_static
  91. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  92. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  93. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})