CMakeLists.txt 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. project(ubxproto C)
  2. cmake_minimum_required (VERSION 2.8)
  3. set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
  4. set(UBXPROTO_VERSION 14.0)
  5. set(INSTALL_LIB_DIR usr/lib CACHE PATH "Installation directory for libraries")
  6. set(INSTALL_INCLUDE_DIR usr/include CACHE PATH "Installation directory for headers")
  7. set(INSTALL_DATA_DIR usr/share/${PROJECT_NAME} CACHE PATH "Installation directory for data files")
  8. #Define include paths
  9. include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR})
  10. #Set sources
  11. set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/ubx.c)
  12. #Compile object files for both shared and static libraries
  13. add_library(ubxprotoobjects OBJECT ${SOURCES})
  14. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
  15. set(PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/ubxaid.h
  16. ${CMAKE_CURRENT_SOURCE_DIR}/ubxcfg.h
  17. ${CMAKE_CURRENT_SOURCE_DIR}/ubx.h
  18. ${CMAKE_CURRENT_SOURCE_DIR}/ubxlog.h
  19. ${CMAKE_CURRENT_SOURCE_DIR}/ubxmessage.h
  20. ${CMAKE_CURRENT_SOURCE_DIR}/ubxmon.h
  21. ${CMAKE_CURRENT_SOURCE_DIR}/ubxrxm.h
  22. ${CMAKE_CURRENT_SOURCE_DIR}/ubxutils.h)
  23. #Static library target
  24. add_library(ubxprotostatic STATIC $<TARGET_OBJECTS:ubxprotoobjects>)
  25. set_target_properties(ubxprotostatic PROPERTIES OUTPUT_NAME ubxproto)
  26. set_target_properties(ubxprotostatic PROPERTIES LINKER_LANGUAGE C)
  27. set_target_properties(ubxprotostatic PROPERTIES PUBLIC_HEADER "${PUBLIC_HEADER}")
  28. set(PROJECT_TARGETS ubxprotostatic)
  29. #Shared library target
  30. add_library(ubxprotoshared SHARED $<TARGET_OBJECTS:ubxprotoobjects>)
  31. set_target_properties(ubxprotoshared PROPERTIES LINKER_LANGUAGE C)
  32. set_target_properties(ubxprotoshared PROPERTIES OUTPUT_NAME ubxproto)
  33. set_target_properties(ubxprotoshared PROPERTIES SOVERSION ${UBXPROTO_VERSION})
  34. set(PROJECT_TARGETS ${PROJECT_TARGETS} ubxprotoshared)
  35. set(PROJECT_LIBS ubxproto)
  36. install(TARGETS ${PROJECT_TARGETS}
  37. EXPORT ${PROJECT_NAME}Targets
  38. ARCHIVE DESTINATION "/${INSTALL_LIB_DIR}" COMPONENT staticlib
  39. LIBRARY DESTINATION "/${INSTALL_LIB_DIR}" COMPONENT sharedlib
  40. PUBLIC_HEADER DESTINATION "/${INSTALL_INCLUDE_DIR}/ubxproto"
  41. COMPONENT dev
  42. )
  43. find_package(Doxygen)
  44. if(DOXYGEN_FOUND)
  45. set(DOXYGEN_INPUT ${CMAKE_SOURCE_DIR})
  46. set(DOXYGEN_OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/doc")
  47. add_custom_target(doc COMMAND ${DOXYGEN_EXECUTABLE} ubxproto.doxyconf
  48. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  49. COMMENT "Generating doxygen documenation")
  50. install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/doc" DESTINATION "/${INSTALL_DATA_DIR}" OPTIONAL)
  51. else(DOXYGEN_FOUND)
  52. message(STATUS "WARNING: Doxygen not found - Reference manual will not be created")
  53. endif(DOXYGEN_FOUND)
  54. #Generate cmake find library addtion
  55. include(CMakeGen)