Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.46 KB | None | 0 0
  1. # project setup
  2. # ******************************************************************************
  3. cmake_minimum_required(VERSION 3.0)
  4.  
  5. set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake")
  6. include(Functions)
  7.  
  8. set(PROJECT_NAME "Toou2DExample")
  9.  
  10. set(CMAKE_AUTOMOC ON)
  11. set(CMAKE_AUTORCC ON)
  12. set(CMAKE_CXX_STANDARD 11)
  13. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  14. set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
  15. set(CMAKE_DEBUG_POSTFIX "d")
  16.  
  17. project(${PROJECT_NAME})
  18.  
  19. # project directories
  20. # ******************************************************************************
  21. #set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/install)
  22. set(ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
  23. set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
  24. set(BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
  25. set(PROJECT_INSTALL_DIR ${CMAKE_INSTALL_PREFIX})
  26. set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/bin)
  27.  
  28. message(STATUS " Project directories:")
  29. message(STATUS " - project source dir: " ${SOURCE_DIR})
  30. message(STATUS " - project binary dir: " ${BINARY_DIR})
  31. message(STATUS " - project build dir: " ${BUILD_DIR})
  32. message(STATUS " - project install dir: " ${PROJECT_INSTALL_DIR})
  33.  
  34. # output directories
  35. # ******************************************************************************
  36. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${BUILD_DIR})
  37. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${BUILD_DIR})
  38. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BUILD_DIR})
  39. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${BUILD_DIR})
  40. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${BUILD_DIR})
  41. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BUILD_DIR})
  42. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${BUILD_DIR})
  43. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${BUILD_DIR})
  44. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BUILD_DIR})
  45.  
  46. # moc
  47. # ******************************************************************************
  48. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  49. set(CMAKE_AUTOMOC ON)
  50. set(CMAKE_AUTORCC ON)
  51. set(CMAKE_AUTOUIC ON)
  52. set_property(GLOBAL PROPERTY USE_FOLDERS ON)
  53.  
  54. # project meta information
  55. # ******************************************************************************
  56. set(Toou2D_VERSION_MAJOR 1)
  57. set(Toou2D_VERSION_MINOR 0)
  58. set(Toou2D_VERSION_PATCH 1)
  59. set(Toou2D_ORG_NAME ijinjay)
  60. set(Toou2D_ORG_DOMAIN org)
  61.  
  62. message(STATUS "> Configure project: ${PROJECT_NAME} (v${Toou2D_VERSION_MAJOR}.${Toou2D_VERSION_MINOR}.${Toou2D_VERSION_PATCH})")
  63.  
  64. # apple rpath
  65. # ******************************************************************************
  66. if(APPLE)
  67. set(CMAKE_SKIP_BUILD_RPATH false)
  68. set(CMAKE_BUILD_WITH_INSTALL_RPATH false)
  69. set(CMAKE_INSTALL_RPATH "@executable_path/../Frameworks")
  70. set(CMAKE_INSTALL_RPATH_USE_LINK_PATH true)
  71.  
  72. message(STATUS " rpath: " ${CMAKE_INSTALL_RPATH})
  73. endif()
  74.  
  75. # 构建Toou2D库
  76. set(Toou2D_QT_VERSION "5.11.1" CACHE STRING "Qt Version")
  77. set(Toou2D_QT_MODULES Core Gui Widgets Quick Qml Concurrent Network DBus PrintSupport Svg)
  78.  
  79. if(UNIX AND NOT APPLE)
  80. set(Toou2D_QT_MODULES ${Toou2D_QT_MODULES} X11Extras)
  81. endif()
  82.  
  83. # 查找QT5,设置定义
  84. find_package(Qt5 ${Toou2D_QT_VERSION} EXACT CONFIG REQUIRED ${Toou2D_QT_MODULES})
  85. add_definitions(${QT_DEFINITIONS})
  86. add_definitions(-DUSE_INSTALL_TARGET)
  87. add_definitions(-DQT_DEPRECATED_WARNINGS)
  88. add_definitions(-DQT_NO_WARNING_OUTPUT)
  89. add_definitions(-DVERSION_IN="1.0.1")
  90. add_definitions(-DURI_STR="Toou2D")
  91.  
  92. # 添加源文件
  93. AddLibrarySources("${CMAKE_CURRENT_SOURCE_DIR}/src-toou2d" "Toou2D" list_lib_src list_lib_hdr)
  94. AddLibrarySources("${CMAKE_CURRENT_SOURCE_DIR}/src-toou2d/controls/gadget" "controls\\gadget" list_lib_src list_lib_hdr)
  95. AddLibrarySources("${CMAKE_CURRENT_SOURCE_DIR}/src-toou2d/controls/interface" "controls\\interface" list_lib_src list_lib_hdr)
  96. AddLibrarySources("${CMAKE_CURRENT_SOURCE_DIR}/src-toou2d/theme" "theme" list_lib_src list_lib_hdr)
  97.  
  98. # 设置库
  99. # ******************************************************************************
  100. set (LIB_NAME Toou2D)
  101. add_library (${LIB_NAME} SHARED ${list_lib_src} ${list_lib_hdr} ${CMAKE_CURRENT_SOURCE_DIR}/src-toou2d/t2d_res.qrc)
  102. set_target_properties(${LIB_NAME} PROPERTIES
  103. LIBRARY_OUTPUT_DIRECTORY ${BUILD_DIR}/${LIB_NAME})
  104. set_target_properties(${LIB_NAME} PROPERTIES PUBLIC_HEADER "${list_lib_hdr}")
  105.  
  106. set(LINK_LIBRARIES PUBLIC Qt5::Core PUBLIC Qt5::Widgets PUBLIC Qt5::Gui PUBLIC Qt5::Quick PUBLIC Qt5::Qml PUBLIC Qt5::Concurrent PUBLIC Qt5::Svg)
  107. if(UNIX AND NOT APPLE)
  108. set(LINK_LIBRARIES ${LINK_LIBRARIES} PUBLIC Qt5::X11Extras)
  109. endif()
  110.  
  111. # 链接库
  112. target_link_libraries(${LIB_NAME} ${LINK_LIBRARIES})
  113.  
  114. set(LIB_HDR "${list_lib_hdr}")
  115.  
  116.  
  117. # 构建可执行目标
  118. # ******************************************************************************
  119. AddApplicationSources("${SOURCE_DIR}/example" "Example" list_app_src)
  120.  
  121. # setup target
  122. # ******************************************************************************
  123. if(APPLE)
  124. set(MACOSX_BUNDLE_BUNDLE_VERSION 1)
  125. set(MACOSX_BUNDLE_LONG_VERSION_STRING ${Toou2D_VERSION_MAJOR}.${Toou2D_VERSION_MINOR}.${Toou2D_VERSION_PATCH})
  126. set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${Toou2D_VERSION_MAJOR}.${Toou2D_VERSION_MINOR}.${Toou2D_VERSION_PATCH})
  127. set(MACOSX_BUNDLE_ICON_FILE ${PROJECT_NAME}.icns)
  128. set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME})
  129. set(MACOSX_BUNDLE_RESOURCES ${BUILD_DIR}/${PROJECT_NAME}.app/Contents/Resources)
  130. set(MACOSX_BUNDLE_ICON ${ROOT_DIR}/icons/develop/${MACOSX_BUNDLE_ICON_FILE})
  131.  
  132. add_executable(${PROJECT_NAME} MACOSX_BUNDLE ${list_app_src} ${MACOSX_BUNDLE_ICON} ${SOURCE_DIR}/example/qml.qrc)
  133. else()
  134. add_executable(${PROJECT_NAME} ${list_app_src} ${SOURCE_DIR}/example/qml.qrc)
  135. endif()
  136.  
  137. # c++11
  138. # ******************************************************************************
  139. if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 3.0)
  140. set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11)
  141. set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
  142. else()
  143. if(APPLE)
  144. list(APPEND CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y -stdlib=libc++")
  145. endif()
  146. if(UNIX AND NOT APPLE)
  147. list(APPEND CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  148. endif()
  149. endif()
  150.  
  151. # configure files
  152. # ******************************************************************************
  153. configure_file(${ROOT_DIR}/cmake/meta_Toou2D.hpp.in ${BINARY_DIR}/meta_Toou2D.hpp)
  154.  
  155. if(APPLE)
  156. configure_file(${ROOT_DIR}/cmake/info.plist.in ${BINARY_DIR}/info.plist)
  157. endif()
  158.  
  159. # target properties
  160. # ******************************************************************************
  161. if(APPLE)
  162. set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${BINARY_DIR}/info.plist)
  163. endif()
  164.  
  165. # includes
  166. # ******************************************************************************
  167. target_include_directories(${PROJECT_NAME} PUBLIC ${BINARY_DIR})
  168.  
  169. # copy resources
  170. # ******************************************************************************
  171. get_target_property(_qmake_executable Qt5::qmake IMPORTED_LOCATION)
  172. get_filename_component(_qt_bin_dir "${_qmake_executable}" DIRECTORY)
  173. find_program(DEPLOYQT_EXECUTABLE NAMES windeployqt macdeployqt HINTS "${_qt_bin_dir}")
  174. set(qmake ${_qmake_executable})
  175. execute_process(
  176. COMMAND ${qmake} -query QT_INSTALL_HEADERS
  177. OUTPUT_VARIABLE QT_INSTALL_HEADERS
  178. OUTPUT_STRIP_TRAILING_WHITESPACE
  179. )
  180. execute_process(
  181. COMMAND ${qmake} -query QT_INSTALL_LIBS
  182. OUTPUT_VARIABLE QT_INSTALL_LIBS
  183. OUTPUT_STRIP_TRAILING_WHITESPACE
  184. )
  185. execute_process(
  186. COMMAND ${qmake} -query QT_INSTALL_BINS
  187. OUTPUT_VARIABLE QT_INSTALL_BINS
  188. OUTPUT_STRIP_TRAILING_WHITESPACE
  189. )
  190. execute_process(
  191. COMMAND ${qmake} -query QT_INSTALL_QML
  192. OUTPUT_VARIABLE QT_INSTALL_QML
  193. OUTPUT_STRIP_TRAILING_WHITESPACE
  194. )
  195. execute_process(
  196. COMMAND ${qmake} -query QT_INSTALL_PREFIX
  197. OUTPUT_VARIABLE QT_INSTALL_PREFIX
  198. OUTPUT_STRIP_TRAILING_WHITESPACE
  199. )
  200. message("${QT_INSTALL_HEADERS}")
  201. message("${QT_INSTALL_LIBS}")
  202. message("${QT_INSTALL_BINS}")
  203. message("${QT_INSTALL_QML}")
  204. message("${QT_INSTALL_PREFIX}")
  205.  
  206. if(APPLE)
  207. execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${MACOSX_BUNDLE_RESOURCES})
  208. execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${MACOSX_BUNDLE_ICON} ${MACOSX_BUNDLE_RESOURCES})
  209. # add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${ROOT_DIR}/example" ${BUILD_DIR}/${PROJECT_NAME}.app/Contents/Resources)
  210. add_custom_command(TARGET ${PROJECT_NAME}
  211. POST_BUILD
  212. COMMAND ${DEPLOYQT_EXECUTABLE} "$<TARGET_BUNDLE_DIR:${PROJECT_NAME}>" -qmldir="${SOURCE_DIR}/example"
  213. )
  214.  
  215. add_custom_command( TARGET ${LIB_NAME}
  216. POST_BUILD
  217. COMMAND ${CMAKE_COMMAND} -E copy ${SOURCE_DIR}/src-toou2d/build-preset/plugin.qmltypes $<TARGET_FILE_DIR:${LIB_NAME}>/plugin.qmltypes
  218. )
  219. add_custom_command( TARGET ${LIB_NAME}
  220. POST_BUILD
  221. COMMAND ${CMAKE_COMMAND} -E copy ${SOURCE_DIR}/src-toou2d/build-preset/qmldir $<TARGET_FILE_DIR:${LIB_NAME}>/qmldir
  222. )
  223. else()
  224. add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${ROOT_DIR}/example" ${BUILD_DIR}/Resources)
  225. # add_custom_target(CopyResources ALL COMMAND ${CMAKE_COMMAND} -E copy_directory "${ROOT_DIR}/res" ${BUILD_DIR}/Resources)
  226. endif()
  227.  
  228. # link
  229. # ******************************************************************************
  230. #set(LINK_LIBRARIES PUBLIC ${VTK_LIBRARIES} PUBLIC Qt5::Core PUBLIC Qt5::Widgets PUBLIC Qt5::Gui PUBLIC Qt5::Quick PUBLIC Qt5::Qml PUBLIC Qt5::Concurrent)
  231. #if(UNIX AND NOT APPLE)
  232. # set(LINK_LIBRARIES ${LINK_LIBRARIES} PUBLIC Qt5::X11Extras)
  233. #endif()
  234.  
  235. target_link_libraries(${PROJECT_NAME} ${LINK_LIBRARIES} ${LIB_NAME})
  236. target_include_directories(${PROJECT_NAME} PRIVATE ${LIB_HDR})
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement