CMakeLists.txt 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. cmake_minimum_required(VERSION 2.8)
  2. project(fuzzylite CXX)
  3. set(CMAKE_VERBOSE_MAKEFILE false)
  4. set(FL_VERSION 5.0)
  5. add_definitions(-DFL_VERSION="${FL_VERSION}")
  6. set(FL_DATE "1408")
  7. add_definitions(-DFL_DATE="${FL_DATE}")
  8. add_definitions(-DFL_BUILD_PATH="${CMAKE_SOURCE_DIR}") #used to determine FL__FILE__
  9. option(FL_USE_FLOAT "Use fl::scalar as float" OFF)
  10. option(FL_BACKTRACE "Provide backtrace information in case of errors" OFF)
  11. option(FL_CPP11 "Builds utilizing C++11, i.e., passing -std=c++11" ON)
  12. if(FL_USE_FLOAT)
  13. add_definitions(-DFL_USE_FLOAT)
  14. endif(FL_USE_FLOAT)
  15. if(NOT FL_BACKTRACE)
  16. add_definitions(-DFL_BACKTRACE_OFF)
  17. endif()
  18. if(FL_CPP11)
  19. add_definitions(-DFL_CPP11)
  20. if(UNIX)
  21. add_definitions(-std=c++11)
  22. endif(UNIX)
  23. endif(FL_CPP11)
  24. if(WIN32)
  25. message("Windows")
  26. add_definitions(-DFL_WINDOWS)
  27. endif()
  28. if (UNIX)
  29. message("Unix")
  30. add_definitions(-DFL_UNIX)
  31. endif()
  32. if (APPLE)
  33. message("Apple")
  34. add_definitions(-DFL_APPLE)
  35. endif()
  36. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY bin)
  37. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY bin)
  38. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY bin)
  39. if(UNIX)
  40. set(CMAKE_CXX_FLAGS "-pedantic -Werror -Wall -Wextra")
  41. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
  42. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
  43. if(NOT APPLE)
  44. set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined") #To avoid undefined methods in library
  45. endif()
  46. endif()
  47. if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  48. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-non-literal-null-conversion")
  49. endif()
  50. set(FL_LIBS)
  51. if(WIN32)
  52. set(CMAKE_CXX_FLAGS "/WX /W4 /EHsc")
  53. #Wx: Treat warnings as errors. W4: All warnings
  54. #http://msdn.microsoft.com/en-us/library/thxezb7y.aspx
  55. #EHsc: call destructors on __try __catch, and to ignore C4530: C++ exception handler used. Note, unwind semantics are not enabled
  56. #/wd4251 disable warning 4251 #http://www.unknownroad.com/rtfm/VisualStudio/warningC4251.html
  57. #To avoid issues from disabling warning 4251, MSVCRT.lib is statically linked to resolve external references
  58. #http://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx
  59. #set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD")
  60. #set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd")
  61. #By default, MD is selected.
  62. if (FL_BACKTRACE)
  63. set(FL_LIBS dbghelp)
  64. endif()
  65. endif()
  66. include_directories(.)
  67. cmake_policy(SET CMP0015 OLD)
  68. link_directories(.)
  69. file(STRINGS FL_HEADERS fl-headers)
  70. file(STRINGS FL_SOURCES fl-sources)
  71. string(REGEX REPLACE "\n" " " ${fl-headers} ${fl-headers})
  72. string(REGEX REPLACE "\n" " " ${fl-sources} ${fl-sources})
  73. message("${exepath}")
  74. set(CMAKE_DEBUG_POSTFIX d)
  75. add_library(fl-shared SHARED ${fl-headers} ${fl-sources})
  76. set_target_properties(fl-shared PROPERTIES OUTPUT_NAME fuzzylite)
  77. set_target_properties(fl-shared PROPERTIES DEBUG_POSTFIX d)
  78. set_target_properties(fl-shared PROPERTIES COMPILE_DEFINITIONS "FL_EXPORT_LIBRARY")
  79. if (UNIX)
  80. set_target_properties(fl-shared PROPERTIES COMPILE_FLAGS "-fPIC")
  81. endif()
  82. target_link_libraries(fl-shared ${FL_LIBS})
  83. add_library(fl-static STATIC ${fl-headers} ${fl-sources})
  84. set_target_properties(fl-static PROPERTIES OUTPUT_NAME fuzzylite-static)
  85. set_target_properties(fl-static PROPERTIES DEBUG_POSTFIX d)
  86. if (UNIX)
  87. set_target_properties(fl-static PROPERTIES COMPILE_FLAGS "-fPIC")
  88. endif()
  89. target_link_libraries(fl-static ${FL_LIBS})
  90. add_executable(fl-bin src/main.cpp)
  91. set_target_properties(fl-bin PROPERTIES OUTPUT_NAME fuzzylite)
  92. set_target_properties(fl-bin PROPERTIES OUTPUT_NAME fuzzylite IMPORT_PREFIX tmp-) #To prevent LNK1149 in Windows
  93. set_target_properties(fl-bin PROPERTIES DEBUG_POSTFIX d)
  94. #set_target_properties(fl-bin PROPERTIES COMPILE_DEFINITIONS "FL_IMPORT_LIBRARY")
  95. #target_link_libraries(fl-bin fl-shared ${FL_LIBS})
  96. target_link_libraries(fl-bin fl-static ${FL_LIBS})
  97. install(TARGETS fl-bin fl-shared fl-static
  98. RUNTIME DESTINATION bin
  99. LIBRARY DESTINATION lib
  100. ARCHIVE DESTINATION lib
  101. )
  102. install(DIRECTORY fl/ DESTINATION include/fl)
  103. message("=====================================")
  104. message("fuzzylite v.${FL_VERSION}b${FL_DATE}\n")
  105. message("FL_USE_FLOAT=${FL_USE_FLOAT}")
  106. message("FL_BACKTRACE=${FL_BACKTRACE}")
  107. message("FL_CPP11=${FL_CPP11}")
  108. message("Build=${CMAKE_BUILD_TYPE}")
  109. message("=====================================\n")
  110. # uninstall target
  111. #configure_file(
  112. #"${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
  113. #"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
  114. #IMMEDIATE @ONLY)
  115. #add_custom_target(uninstall
  116. #COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake)
  117. #unix uninstall
  118. #xargs rm < install_manifest.txt