diff --git a/CMakeLists.txt b/CMakeLists.txt index de03564..fe9f536 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,8 @@ cmake_minimum_required(VERSION 2.8) -#It seems Cmake does not set default bild type so we force it -if( NOT CMAKE_BUILD_TYPE ) - set( CMAKE_BUILD_TYPE Debug CACHE STRING "Debug" FORCE ) -endif() - project(freeopcua) +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) option(BUILD_CLIENT "Build Client" ON) option(BUILD_SERVER "Build Server" ON) @@ -16,28 +13,6 @@ option(BUILD_PYTHON "Build Python bindings" ON) option(BUILD_TESTING "Build and run tests" OFF) OPTION(BUILD_SHARED_LIBS "Build shared libraries." ON) -IF (NOT DEFINED CMAKE_INSTALL_LIBDIR) - SET(CMAKE_INSTALL_LIBDIR lib) -ENDIF () - -SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY - ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR} - CACHE PATH - "" - ) - -SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY - ${PROJECT_BINARY_DIR}/bin - CACHE PATH - "" - ) - -SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY - ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR} - CACHE PATH - "" - ) - # Helper function to generate a pkg-config file for a single library # Takes the filename of the .pc file as a parameter and replaces all # placeholders in the .pc.in file with the actual values @@ -60,23 +35,10 @@ function(generate_pkgconfig BASENAME) endif() endfunction(generate_pkgconfig) if(MSVC) - SET(STATIC_LIBRARY_CXX_FLAGS /MDd CACHE STRING "") - SET(EXECUTABLE_CXX_FLAGS /MDd CACHE STRING "") - SET(DYNAMIC_LIBRARY_CXX_FLAGS /MDd CACHE STRING "") - SET(D /D) - - add_definitions(/D_SCL_SECURE_NO_WARNINGS /D_CRT_SECURE_NO_WARNINGS /D_WIN32 /D_WINDOWS /FS /D_WIN32_WINNT=0x0600) - add_compile_options(/Zi /Od /EHsc /W4) -else(MSVC) - set(CMAKE_CXX_FLAGS_DEBUG " -Wall -ggdb -o0 ${CMAKE_CXX_FLAGS_DEBUG}") - - SET(STATIC_LIBRARY_CXX_FLAGS) - SET(EXECUTABLE_CXX_FLAGS) - SET(DYNAMIC_LIBRARY_CXX_FLAGS) - SET(D -D) - set(CMAKE_CXX_FLAGS " -std=c++11 -Wall -fPIC ${CMAKE_CXX_FLAGS} ") - SET (CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS_INIT} $ENV{LDFLAGS}) - #set(CMAKE_SHARED_LINKER_FLAGS "--no-undefined" ) + add_definitions(-D_SCL_SECURE_NO_WARNINGS) + add_definitions(-D_CRT_SECURE_NO_WARNINGS) + add_compile_options(/bigobj) + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) endif() if(WIN32) @@ -105,7 +67,7 @@ else(WIN32) endif(WIN32) -find_package( Boost COMPONENTS system program_options filesystem thread REQUIRED ) +find_package( Boost COMPONENTS system program_options filesystem thread date_time REQUIRED ) include_directories( ${Boost_INCLUDE_DIRS} ) link_directories( ${Boost_LIBRARY_DIRS} ) message(STATUS "Boost INCLUDE DIR IS: " ${Boost_INCLUDE_DIRS}) @@ -185,14 +147,12 @@ add_library(opcuaprotocol src/protocol/subscriptions.cpp ) -if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) - target_compile_options(opcuaprotocol PUBLIC ${STATIC_LIBRARY_CXX_FLAGS}) -endif () target_link_libraries(opcuaprotocol ${ADDITIONAL_LINK_LIBRARIES}) target_include_directories(opcuaprotocol PUBLIC $) install(TARGETS opcuaprotocol EXPORT FreeOpcUa + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/static) + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) generate_pkgconfig("libopcuaprotocol.pc") @@ -227,10 +187,6 @@ if (BUILD_TESTING) gtest_main ) - if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) - target_compile_options(test_opcuaprotocol PUBLIC ${EXECUTABLE_CXX_FLAGS}) - endif () - add_test(NAME opcuaprotocol COMMAND test_opcuaprotocol) endif() @@ -266,15 +222,12 @@ SET(opcuacore_SOURCES add_library(opcuacore ${opcuacore_SOURCES}) -if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) - target_compile_options(opcuacore PUBLIC ${STATIC_LIBRARY_CXX_FLAGS}) -endif () - -target_link_libraries(opcuacore ${ADDITIONAL_LINK_LIBRARIES} opcuaprotocol ${Boost_SYSTEM_LIBRARY} ${Boost_FILESYSTEM_LIBRARY}) +target_link_libraries(opcuacore ${ADDITIONAL_LINK_LIBRARIES} opcuaprotocol ${Boost_LIBRARIES}) target_include_directories(opcuacore PUBLIC $) install(TARGETS opcuacore EXPORT FreeOpcUa + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/static) + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) generate_pkgconfig("libopcuacore.pc") @@ -306,7 +259,7 @@ if (BUILD_TESTING) ) if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) - target_compile_options(test_opcuacore PUBLIC ${D}DYNAMIC_ADDON_PATH="${DYNAMIC_ADDON_PATH}" ${D}TEST_CORE_CONFIG_PATH="${TEST_CORE_CONFIG_PATH}" ${EXECUTABLE_CXX_FLAGS}) + target_compile_options(test_opcuacore PUBLIC -DDYNAMIC_ADDON_PATH="${DYNAMIC_ADDON_PATH}" -DTEST_CORE_CONFIG_PATH="${TEST_CORE_CONFIG_PATH}" ) endif () add_test(NAME opcuacore COMMAND test_opcuacore) @@ -327,9 +280,6 @@ if (BUILD_CLIENT) src/client/client.cpp ) - if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) - target_compile_options(opcuaclient PUBLIC ${STATIC_LIBRARY_CXX_FLAGS}) - endif () target_link_libraries(opcuaclient opcuacore ${ADDITIONAL_LINK_LIBRARIES} @@ -338,8 +288,9 @@ if (BUILD_CLIENT) target_include_directories(opcuaclient PUBLIC $) install(TARGETS opcuaclient EXPORT FreeOpcUa + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/static) + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) generate_pkgconfig("libopcuaclient.pc") @@ -371,9 +322,6 @@ if (BUILD_CLIENT) opcuacore ) - if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) - target_compile_options(opcuaclient PUBLIC ${EXECUTABLE_CXX_FLAGS}) - endif () endif(BUILD_CLIENT) @@ -423,14 +371,12 @@ if(BUILD_SERVER) src/server/subscription_service_internal.cpp ) - if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) - target_compile_options(opcuaserver PUBLIC ${STATIC_LIBRARY_CXX_FLAGS}) - endif () - target_link_libraries(opcuaserver ${ADDITIONAL_LINK_LIBRARIES} opcuacore opcuaprotocol ${Boost_SYSTEM_LIBRARY}) + target_link_libraries(opcuaserver ${ADDITIONAL_LINK_LIBRARIES} opcuacore opcuaprotocol ${Boost_LIBRARIES}) target_include_directories(opcuaserver PUBLIC $) install(TARGETS opcuaserver EXPORT FreeOpcUa + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/static) + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) generate_pkgconfig("libopcuaserver.pc") @@ -481,7 +427,7 @@ if(BUILD_SERVER) target_include_directories(test_opcuaserver PUBLIC .) if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) - target_compile_options(test_opcuaserver PUBLIC ${D}TEST_CORE_CONFIG_PATH="${TEST_CORE_CONFIG_PATH}" ${STATIC_LIBRARY_CXX_FLAGS}) + target_compile_options(test_opcuaserver PUBLIC -DTEST_CORE_CONFIG_PATH="${TEST_CORE_CONFIG_PATH}") endif () add_test(NAME opcuaserverapp COMMAND test_opcuaserver) @@ -510,9 +456,6 @@ if(BUILD_SERVER) opcuaserver ${Boost_PROGRAM_OPTIONS_LIBRARY} ) - if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) - target_compile_options(opcuaserverapp PUBLIC ${EXECUTABLE_CXX_FLAGS}) - endif () endif(BUILD_SERVER) @@ -533,9 +476,6 @@ if (BUILD_CLIENT) ${SSL_SUPPORT_LINK_LIBRARIES} ) - if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) - target_compile_options(example_client PUBLIC ${EXECUTABLE_CXX_FLAGS}) - endif () endif (BUILD_CLIENT) @@ -555,9 +495,6 @@ if(BUILD_SERVER) opcuaserver ) - if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) - target_compile_options(example_server PUBLIC ${EXECUTABLE_CXX_FLAGS}) - endif () if(MSVC) set_target_properties(example_server PROPERTIES LINK_FLAGS /STACK:3000000) endif(MSVC) @@ -572,8 +509,8 @@ if (BUILD_PYTHON) add_subdirectory(python) endif (BUILD_PYTHON) -install(EXPORT FreeOpcUa DESTINATION lib/cmake/FreeOpcUa FILE FreeOpcUaConfig.cmake) +install(EXPORT FreeOpcUa DESTINATION share/freeopcua FILE freeopcuaConfig.cmake) SET(CPACK_GENERATOR "DEB") -SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "FreeOpcUa") +SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "freeopcua") INCLUDE(CPack)