1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
cmake_minimum_required(VERSION 2.8.8)
project(FuzzyLiteDemo CXX)
#Some default policies and variables
if (APPLE)
cmake_policy(SET CMP0042 NEW)
endif()
if (MSVC)
cmake_policy(SET CMP0054 NEW)
endif()
if(NOT CMAKE_VERBOSE_MAKEFILE)
set(CMAKE_VERBOSE_MAKEFILE false)
endif()
if( NOT CMAKE_BUILD_TYPE )
set( CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo
MinSizeRel." FORCE )
endif()
option(FL_BACKTRACE "Provide backtrace information in case of errors" ON)
option(FL_STATIC "Statically link to fuzzylite libraries" ON)
set(BacktraceLibrary)
if (MSVC AND FL_BACKTRACE)
set(BacktraceLibrary dbghelp)
endif()
if (CMAKE_BUILD_TYPE MATCHES Debug)
set(FL_DEBUG ON)
else()
set(FL_DEBUG OFF)
endif()
set(FL_SYSTEM_LIBRARY FALSE) #Finds the library installed in the system
set(FL_LIBRARY_DIR)
if (NOT FL_SYSTEM_LIBRARY)
#it is possible to find the FuzzyLiteLibrary locally as follows,
#assuming the submodule of fuzzylite is added to the ${PROJECT_SOURCE_DIR}:
set(FL_HOME ${PROJECT_SOURCE_DIR}/../../fuzzylite/)
set(FL_INCLUDE_DIR ${FL_HOME})
if (FL_DEBUG)
set(FL_LIBRARY_DIR ${FL_HOME}/debug/bin)
else()
set(FL_LIBRARY_DIR ${FL_HOME}/release/bin)
endif()
message("Finding FuzzyLiteLibrary locally at ${FL_LIBRARY_DIR}")
include_directories(${FL_INCLUDE_DIR})
endif()
set(FL_POSTFIX)
if (FL_STATIC)
set(FL_POSTFIX "-static")
endif()
if (FL_DEBUG)
set(FL_POSTFIX "${FL_POSTFIX}-debug")
endif()
set(FL_LIBRARY_NAME fuzzylite${FL_POSTFIX})
find_library (FuzzyLiteLibrary ${FL_LIBRARY_NAME} HINTS ${FL_LIBRARY_DIR})
if (MSVC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19)
#C++11 not available before Visual Studio 2015
if (NOT FL_CPP98)
set(FL_CPP98 ON)
endif()
endif()
#if building using C++98
if(FL_CPP98)
add_definitions(-DFL_CPP98)
if(NOT MSVC)
#Set C++98 by default in Clang and others
add_definitions(-std=c++98)
endif()
else()
if(NOT MSVC)
#Set C++11 by default in Clang and others
add_definitions(-std=c++11)
endif()
endif(FL_CPP98)
#we add the definition of the building path to remove it when using macro FL_LOG
add_definitions(-DFL_BUILD_PATH="${CMAKE_SOURCE_DIR}") #used to determine
#we add the sources
set(sources src/main.cpp)
if(MSVC)
#Set compilation flags in Windows
set(CMAKE_CXX_FLAGS "/W4 /EHsc")
#Wx: Treat warnings as errors. W4: All warnings
#http://msdn.microsoft.com/en-us/library/thxezb7y.aspx
#EHsc: call destructors on __try __catch, and to ignore C4530: C++ exception handler used. Note, unwind semantics are not enabled
endif()
#we create the binary
add_executable(binary ${sources})
if (NOT FL_STATIC)
target_compile_definitions(binary PRIVATE FL_IMPORT_LIBRARY)
endif()
#linking the fuzzylite library
target_link_libraries (binary ${FuzzyLiteLibrary} ${BacktraceLibrary})
#setting the name of the product
set_target_properties(binary PROPERTIES OUTPUT_NAME FuzzyLiteDemo)
#specially for windows
set_target_properties(binary PROPERTIES OUTPUT_NAME FuzzyLiteDemo IMPORT_PREFIX tmp-) #To prevent LNK1149 in Windows
#in case of building on debug mode
set_target_properties(binary PROPERTIES DEBUG_POSTFIX d)
message("=====================================")
message("FuzzyLite Demo v6.0\n")
message("FL_HOME=${FL_HOME}")
message("FL_LIBRARY_NAME=${FL_LIBRARY_NAME}")
message("FuzzyLiteLibrary=${FuzzyLiteLibrary}")
message("")
message("FL_BACKTRACE=${FL_BACKTRACE}")
message("FL_STATIC=${FL_STATIC}")
message("FL_DEBUG=${FL_DEBUG}")
message("CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
message("CMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}")
message("CMAKE_CXX_COMPILER_VERSION=${CMAKE_CXX_COMPILER_VERSION}")
message("CMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}")
message("COMPILE_DEFINITIONS:")
get_directory_property(fl-definitions DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS )
foreach(d ${fl-definitions})
message( STATUS "Defined: " ${d} )
endforeach()
message("=====================================\n")
|