1 # For internal use only 5 project(${_project_name})
7 cmake_parse_arguments(${PROJECT_NAME}
8 "SKIP_EXAMPLES;SKIP_INIT" 10 "DEPENDS;INTERNAL_INCLUDE_DIRS;LINK_LIBRARIES;SOURCES;PRIVATE_HEADERS;PUBLIC_HEADERS;RESOURCES;BINARY_RESOURCES" 14 if(NOT ${PROJECT_NAME}_VERSION MATCHES
"^[0-9]+\\.[0-9]+\\.[0-9]+$")
15 message(SEND_ERROR
"VERSION argument invalid: ${${PROJECT_NAME}_VERSION}")
18 string(REPLACE "." ";" _version_numbers ${${PROJECT_NAME}_VERSION})
19 list(GET _version_numbers 0 ${PROJECT_NAME}_MAJOR_VERSION)
20 list(GET _version_numbers 1 ${PROJECT_NAME}_MINOR_VERSION)
21 list(GET _version_numbers 2 ${PROJECT_NAME}_PATCH_VERSION)
23 if(NOT ${PROJECT_NAME}_TARGET)
24 set(${PROJECT_NAME}_TARGET
us${PROJECT_NAME})
26 set(PROJECT_TARGET ${${PROJECT_NAME}_TARGET})
28 if(${PROJECT_NAME}_DEPENDS)
29 find_package(CppMicroServices REQUIRED ${${PROJECT_NAME}_DEPENDS} QUIET
30 HINTS ${CppMicroServices_BINARY_DIR}
35 #----------------------------------------------------------------------------- 36 # Include dirs and libraries 37 #----------------------------------------------------------------------------- 39 set(${PROJECT_NAME}_INCLUDE_DIRS
40 ${CMAKE_CURRENT_SOURCE_DIR}/include
41 ${CMAKE_CURRENT_BINARY_DIR}/include
44 configure_file(${CppMicroServices_SOURCE_DIR}/cmake/usExport.h.in
45 ${CMAKE_CURRENT_BINARY_DIR}/include/
us${PROJECT_NAME}Export.h)
46 list(APPEND ${PROJECT_NAME}_PUBLIC_HEADERS
47 ${CMAKE_CURRENT_BINARY_DIR}/include/
us${PROJECT_NAME}Export.h)
49 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/include/
us${PROJECT_NAME}Config.h.in)
50 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/
us${PROJECT_NAME}Config.h.in
51 ${CMAKE_CURRENT_BINARY_DIR}/include/
us${PROJECT_NAME}Config.h)
52 list(APPEND ${PROJECT_NAME}_PUBLIC_HEADERS
53 ${CMAKE_CURRENT_BINARY_DIR}/include/
us${PROJECT_NAME}Config.h)
56 set(_internal_include_dirs ${${PROJECT_NAME}_INTERNAL_INCLUDE_DIRS})
57 set(${PROJECT_NAME}_INTERNAL_INCLUDE_DIRS )
59 if(_internal_include_dirs)
60 foreach(_internal_include_dir ${_internal_include_dirs})
61 if(IS_ABSOLUTE
"${_internal_include_dir}")
62 list(APPEND ${PROJECT_NAME}_INTERNAL_INCLUDE_DIRS ${_internal_include_dir})
64 list(APPEND ${PROJECT_NAME}_INTERNAL_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/${_internal_include_dir})
70 if(CMAKE_VERSION VERSION_LESS 2.8.12)
73 ${${PROJECT_NAME}_INCLUDE_DIRS}
74 ${${PROJECT_NAME}_INTERNAL_INCLUDE_DIRS}
78 #----------------------------------------------------------------------------- 80 #----------------------------------------------------------------------------- 82 # Generate the module init file 83 if(NOT ${PROJECT_NAME}_SKIP_INIT)
87 if(${PROJECT_NAME}_RESOURCES OR ${PROJECT_NAME}_BINARY_RESOURCES)
91 # Create the module library 92 add_library(${${PROJECT_NAME}_TARGET} ${${PROJECT_NAME}_SOURCES}
93 ${${PROJECT_NAME}_PRIVATE_HEADERS} ${${PROJECT_NAME}_PUBLIC_HEADERS})
96 set_property(
TARGET ${${PROJECT_NAME}_TARGET} APPEND PROPERTY COMPILE_DEFINITIONS US_MODULE_NAME=${${PROJECT_NAME}_TARGET})
97 set_property(
TARGET ${${PROJECT_NAME}_TARGET} PROPERTY US_MODULE_NAME ${${PROJECT_NAME}_TARGET})
98 set_property(
TARGET ${${PROJECT_NAME}_TARGET} PROPERTY FOLDER
"${MITK_ROOT_FOLDER}/CppMicroServices")
99 if(NOT US_BUILD_SHARED_LIBS)
100 set_property(
TARGET ${${PROJECT_NAME}_TARGET} APPEND PROPERTY COMPILE_DEFINITIONS US_STATIC_MODULE)
104 if(${PROJECT_NAME}_LINK_FLAGS OR US_LINK_FLAGS)
105 set_target_properties(${${PROJECT_NAME}_TARGET} PROPERTIES
106 LINK_FLAGS
"${US_LINK_FLAGS} ${${PROJECT_NAME}_LINK_FLAGS}" 110 if(CMAKE_VERSION VERSION_GREATER 2.8.11.99)
111 # Currently, public headers include private header files, 112 # so the internal include dirs need to be in the public 113 # include dir section. This needs to be fixed. 114 target_include_directories(${${PROJECT_NAME}_TARGET}
115 PUBLIC ${US_INCLUDE_DIRS} ${${PROJECT_NAME}_INCLUDE_DIRS}
116 PUBLIC ${${PROJECT_NAME}_INTERNAL_INCLUDE_DIRS}
121 set_target_properties(${${PROJECT_NAME}_TARGET} PROPERTIES
122 SOVERSION ${${PROJECT_NAME}_VERSION}
123 PUBLIC_HEADER
"${${PROJECT_NAME}_PUBLIC_HEADERS}" 124 PRIVATE_HEADER
"${${PROJECT_NAME}_PRIVATE_HEADERS}" 127 # Link additional libraries
128 if(${PROJECT_NAME}_LINK_LIBRARIES OR US_LIBRARIES)
129 target_link_libraries(${${PROJECT_NAME}_TARGET} ${US_LIBRARIES} ${${PROJECT_NAME}_LINK_LIBRARIES})
132 # Embed module resources 134 if(${PROJECT_NAME}_RESOURCES OR US_LIBRARIES)
136 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/resources
137 FILES ${${PROJECT_NAME}_RESOURCES}
138 ZIP_ARCHIVES ${US_LIBRARIES}
141 if(${PROJECT_NAME}_BINARY_RESOURCES)
143 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/resources
144 FILES ${${PROJECT_NAME}_BINARY_RESOURCES}
149 #-----------------------------------------------------------------------------
151 #-----------------------------------------------------------------------------
153 if(NOT US_NO_INSTALL)
154 install(TARGETS ${${PROJECT_NAME}_TARGET}
155 EXPORT
us${PROJECT_NAME}Targets
156 RUNTIME DESTINATION ${RUNTIME_INSTALL_DIR} ${US_SDK_INSTALL_COMPONENT}
157 LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR} ${US_SDK_INSTALL_COMPONENT}
158 ARCHIVE DESTINATION ${ARCHIVE_INSTALL_DIR} ${US_SDK_INSTALL_COMPONENT}
159 PUBLIC_HEADER DESTINATION ${HEADER_INSTALL_DIR} ${US_SDK_INSTALL_COMPONENT}
160 PRIVATE_HEADER DESTINATION ${HEADER_INSTALL_DIR} ${US_SDK_INSTALL_COMPONENT})
163 #----------------------------------------------------------------------------- 165 #----------------------------------------------------------------------------- 167 if(US_BUILD_TESTING AND EXISTS
"${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
168 add_subdirectory(
test)
171 #----------------------------------------------------------------------------- 173 #----------------------------------------------------------------------------- 175 if(US_BUILD_TESTING AND EXISTS
"${CMAKE_CURRENT_SOURCE_DIR}/doc/snippets/CMakeLists.txt")
176 # Compile source code snippets 177 add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/doc/snippets)
180 #----------------------------------------------------------------------------- 181 # Last configuration and install steps 182 #----------------------------------------------------------------------------- 184 # Version information 186 ${US_CMAKE_DIR}/usModuleConfigVersion.cmake.in
187 ${CppMicroServices_BINARY_DIR}/
us${PROJECT_NAME}ConfigVersion.cmake
191 export(TARGETS ${${PROJECT_NAME}_TARGET} ${US_LIBRARIES}
192 FILE ${CppMicroServices_BINARY_DIR}/
us${PROJECT_NAME}Targets.cmake)
193 if(NOT US_NO_INSTALL)
194 install(EXPORT
us${PROJECT_NAME}Targets
195 FILE
us${PROJECT_NAME}Targets.cmake
196 DESTINATION ${AUXILIARY_CMAKE_INSTALL_DIR})
199 # Configure config file for the build tree 201 set(PACKAGE_CONFIG_INCLUDE_DIR
202 ${${PROJECT_NAME}_INCLUDE_DIRS}
203 ${${PROJECT_NAME}_INTERNAL_INCLUDE_DIRS})
204 set(PACKAGE_CONFIG_RUNTIME_LIBRARY_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
207 ${US_CMAKE_DIR}/usModuleConfig.cmake.in
208 ${CppMicroServices_BINARY_DIR}/
us${PROJECT_NAME}Config.cmake
212 # Configure config file
for the install tree
214 if(NOT US_NO_INSTALL)
215 set(CONFIG_INCLUDE_DIR ${HEADER_INSTALL_DIR})
216 set(CONFIG_RUNTIME_LIBRARY_DIR ${RUNTIME_INSTALL_DIR})
218 configure_package_config_file(
219 ${US_CMAKE_DIR}/usModuleConfig.cmake.in
220 ${CppMicroServices_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/
us${PROJECT_NAME}Config.cmake
221 INSTALL_DESTINATION ${AUXILIARY_CMAKE_INSTALL_DIR}
222 PATH_VARS CONFIG_INCLUDE_DIR CONFIG_RUNTIME_LIBRARY_DIR
223 NO_SET_AND_CHECK_MACRO
224 NO_CHECK_REQUIRED_COMPONENTS_MACRO
227 install(FILES ${CppMicroServices_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/
us${PROJECT_NAME}Config.cmake
228 ${CppMicroServices_BINARY_DIR}/
us${PROJECT_NAME}ConfigVersion.cmake
229 DESTINATION ${AUXILIARY_CMAKE_INSTALL_DIR}
230 ${US_SDK_INSTALL_COMPONENT})
233 #----------------------------------------------------------------------------- 235 #----------------------------------------------------------------------------- 237 if(US_BUILD_EXAMPLES AND NOT ${PROJECT_NAME}_SKIP_EXAMPLES AND
238 EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/examples/CMakeLists.txt)
239 set(CppMicroServices_DIR ${CppMicroServices_BINARY_DIR})
240 add_subdirectory(examples)
Follow Up Storage - Class to facilitate loading/accessing structured follow-up data.
usFunctionAddResources()
Add resources to a library or executable.
usFunctionEmbedResources()
Embed resources in a library or executable.
usMacroCreateModule(_project_name)
usFunctionGetResourceSource()
Get a source file name for handling resource dependencies.
usFunctionGenerateModuleInit(src_var)
Generate a source file which handles proper initialization of a module.