2222 message (FATAL_ERROR "C++ standard must C++14 or higher" )
2323endif ()
2424
25- # Find third-party library
26- find_package (Boost REQUIRED)
25+
26+ find_package (Boost REQUIRED CONFIG COMPONENTS system thread )
2727find_package (libssh)
2828if (libssh_FOUND)
2929 set (THIRDPARTY_LIB ${THIRDPARTY_LIB} ssh)
7676 ${PROJECT_BINARY_DIR} /include /
7777)
7878
79- # Head file list
8079set (
8180 ELITE_HEADER_FILES
8281 Elite/DataType.hpp
@@ -101,147 +100,80 @@ set(
101100 Common/StringUtils.hpp
102101)
103102
104- # Set output library default name
105103set (SDK_STATIC_LIB_OUTPUT_NAME "${PROJECT_NAME} " )
106104set (SDK_SHARED_LIB_OUTPUT_NAME "${PROJECT_NAME} " )
107105
108- # Configure accordingly based on the operating system.
109106if (CMAKE_SYSTEM_NAME STREQUAL "Windows" )
110107 message (STATUS "SYSTEM: Windows" )
111- add_definitions (
112- -D_WIN32_WINNT=0x0601
113- -DELITE_EXPORT_LIBRARY
114- )
108+ add_definitions (-D_WIN32_WINNT=0x0601)
115109 set (SDK_STATIC_LIB_OUTPUT_NAME "${PROJECT_NAME} _static" )
116110 set (SDK_SHARED_LIB_OUTPUT_NAME "${PROJECT_NAME} " )
117- elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux" )
118- message (STATUS "SYSTEM: Linux" )
111+ elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR APPLE )
112+ if (APPLE )
113+ message (STATUS "SYSTEM: macOS" )
114+ else ()
115+ message (STATUS "SYSTEM: Linux" )
116+ endif ()
119117 set (SYSTEM_LIB pthread)
120118else ()
121119 message (FATAL_ERROR "Unsupport operating system" )
122120endif ()
123121
122+ add_library (${PROJECT_NAME} _SHARED SHARED ${ELITE_LIB_SOURCE_FILE} )
123+ add_library (${PROJECT_NAME} _STATIC STATIC ${ELITE_LIB_SOURCE_FILE} )
124+
125+ if (CMAKE_SYSTEM_NAME STREQUAL "Windows" )
126+ target_compile_definitions (${PROJECT_NAME} _SHARED PRIVATE ELITE_EXPORT_LIBRARY)
127+ target_compile_definitions (${PROJECT_NAME} _STATIC PRIVATE ELITE_EXPORT_LIBRARY)
128+ elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR APPLE )
129+ target_compile_definitions (${PROJECT_NAME} _SHARED PRIVATE ELITE_EXPORT_LIBRARY)
130+ target_compile_definitions (${PROJECT_NAME} _STATIC PRIVATE ELITE_EXPORT_LIBRARY)
131+ endif ()
124132
125- # Add library
126- add_library (
127- ${PROJECT_NAME} _SHARED
128- SHARED
129- ${ELITE_LIB_SOURCE_FILE}
130- )
131- add_library (
132- ${PROJECT_NAME} _STATIC
133- STATIC
134- ${ELITE_LIB_SOURCE_FILE}
135- )
136133define_rel_file_macro(${PROJECT_NAME} _SHARED)
137134define_rel_file_macro(${PROJECT_NAME} _STATIC)
138135set_target_properties (${PROJECT_NAME} _SHARED PROPERTIES OUTPUT_NAME ${SDK_SHARED_LIB_OUTPUT_NAME} )
139136set_target_properties (${PROJECT_NAME} _STATIC PROPERTIES OUTPUT_NAME ${SDK_STATIC_LIB_OUTPUT_NAME} )
140- target_include_directories (
141- ${PROJECT_NAME} _SHARED
142- PRIVATE
143- ${ELITE_LIB_INCLUDE_DIR}
144- )
145- target_include_directories (
146- ${PROJECT_NAME} _STATIC
147- PRIVATE
148- ${ELITE_LIB_INCLUDE_DIR}
149- )
150- target_link_libraries (
151- ${PROJECT_NAME} _SHARED
152- PRIVATE
153- ${THIRDPARTY_LIB}
154- )
155- target_link_libraries (
156- ${PROJECT_NAME} _STATIC
157- PRIVATE
158- ${THIRDPARTY_LIB}
159- )
137+ target_include_directories (${PROJECT_NAME} _SHARED PRIVATE ${ELITE_LIB_INCLUDE_DIR} )
138+ target_include_directories (${PROJECT_NAME} _STATIC PRIVATE ${ELITE_LIB_INCLUDE_DIR} )
139+ target_link_libraries (${PROJECT_NAME} _SHARED PRIVATE ${THIRDPARTY_LIB} )
140+ target_link_libraries (${PROJECT_NAME} _STATIC PRIVATE ${THIRDPARTY_LIB} )
160141
161- # Copy head file
162142foreach (header ${ELITE_HEADER_FILES} )
163- file (COPY ${PROJECT_SOURCE_DIR} /include /${header}
164- DESTINATION ${PROJECT_BINARY_DIR} /include /Elite)
143+ file (COPY ${PROJECT_SOURCE_DIR} /include /${header} DESTINATION ${PROJECT_BINARY_DIR} /include /Elite)
165144endforeach ()
166145
167- # Prepare exporting targets
168146add_library (${PROJECT_NAME} ::shared ALIAS ${PROJECT_NAME} _SHARED)
169- target_include_directories (
170- ${PROJECT_NAME} _SHARED
171- PUBLIC
172- $<BUILD_INTERFACE:${PROJECT_BINARY_DIR} /include >
173- $<INSTALL_INTERFACE:include >
174- )
147+ target_include_directories (${PROJECT_NAME} _SHARED PUBLIC $<BUILD_INTERFACE:${PROJECT_BINARY_DIR} /include > $<INSTALL_INTERFACE:include >)
175148add_library (${PROJECT_NAME} ::static ALIAS ${PROJECT_NAME} _STATIC)
176- target_include_directories (
177- ${PROJECT_NAME} _STATIC
178- PUBLIC
179- $<BUILD_INTERFACE:${PROJECT_BINARY_DIR} /include >
180- $<INSTALL_INTERFACE:include >
181- )
149+ target_include_directories (${PROJECT_NAME} _STATIC PUBLIC $<BUILD_INTERFACE:${PROJECT_BINARY_DIR} /include > $<INSTALL_INTERFACE:include >)
182150
183- # Is compile examples
184151if (ELITE_COMPILE_EXAMPLES)
185152 message (STATUS "Compile the exmaples" )
186153 add_subdirectory (example ${CMAKE_BINARY_DIR} /example/)
187154endif ()
188-
189- # If compile documentation
190155if (ELITE_COMPILE_DOC)
191156 message (STATUS "Compile the documentation." )
192157 add_subdirectory (doc ${CMAKE_BINARY_DIR} /doc /)
193158endif ()
194-
195- # If googel test has been foune, compile unit test
196159if (ELITE_COMPILE_TESTS)
197160 message (STATUS "Compile the tests" )
198161 add_subdirectory (test ${CMAKE_BINARY_DIR} /test /)
199162endif ()
200163
201- # Disable installation if project imported with FetchContent
202164string (COMPARE EQUAL "${CMAKE_SOURCE_DIR} " "${CMAKE_CURRENT_SOURCE_DIR} " is_top_level)
203165option (ELITE_INSTALL "Include packaging rules" "${is_top_level} " )
204166
205- # On the Linux platform, install binary library files, header files, and CMake configuration files.
206- if (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND ELITE_INSTALL)
167+ if ((CMAKE_SYSTEM_NAME STREQUAL "Linux" OR APPLE ) AND ELITE_INSTALL)
207168 include (GNUInstallDirs)
208- install (
209- TARGETS ${PROJECT_NAME} _SHARED ${PROJECT_NAME} _STATIC
210- EXPORT ${PROJECT_NAME} Targets
211- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
212- )
213- install (
214- DIRECTORY ${PROJECT_BINARY_DIR} /include /
215- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
216- )
217- install (
218- DIRECTORY ${PROJECT_SOURCE_DIR} /source /resources/
219- DESTINATION share/Elite
220- )
221-
169+ install (TARGETS ${PROJECT_NAME} _SHARED ${PROJECT_NAME} _STATIC EXPORT ${PROJECT_NAME} Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} )
170+ install (DIRECTORY ${PROJECT_BINARY_DIR} /include / DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
171+ install (DIRECTORY ${PROJECT_SOURCE_DIR} /source /resources/ DESTINATION share/Elite)
222172 include (CMakePackageConfigHelpers)
223- configure_package_config_file(
224- "${CMAKE_CURRENT_SOURCE_DIR} /${PROJECT_NAME} Config.cmake.in"
225- "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} Config.cmake"
226- INSTALL_DESTINATION lib/cmake/${PROJECT_NAME}
227- )
228- write_basic_package_version_file(
229- ${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} ConfigVersion.cmake
230- VERSION ${PROJECT_VERSION}
231- COMPATIBILITY SameMajorVersion
232- )
233-
234- install (
235- EXPORT ${PROJECT_NAME} Targets
236- FILE ${PROJECT_NAME} Targets.cmake
237- DESTINATION lib/cmake/${PROJECT_NAME}
238- )
239- install (
240- FILES
241- "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} Config.cmake"
242- "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} ConfigVersion.cmake"
243- DESTINATION lib/cmake/${PROJECT_NAME}
244- )
173+ configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR} /${PROJECT_NAME} Config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} Config.cmake" INSTALL_DESTINATION lib/cmake/${PROJECT_NAME} )
174+ write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} ConfigVersion.cmake VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion)
175+ install (EXPORT ${PROJECT_NAME} Targets FILE ${PROJECT_NAME} Targets.cmake DESTINATION lib/cmake/${PROJECT_NAME} )
176+ install (FILES "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} Config.cmake" "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} ConfigVersion.cmake" DESTINATION lib/cmake/${PROJECT_NAME} )
245177endif ()
246178
247179message (STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE} " )
0 commit comments