Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # project setup
- # ******************************************************************************
- cmake_minimum_required(VERSION 3.0)
- set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake")
- include(Functions)
- set(PROJECT_NAME "Toou2DExample")
- set(CMAKE_AUTOMOC ON)
- set(CMAKE_AUTORCC ON)
- set(CMAKE_CXX_STANDARD 11)
- set(CMAKE_CXX_STANDARD_REQUIRED ON)
- set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
- set(CMAKE_DEBUG_POSTFIX "d")
- project(${PROJECT_NAME})
- # project directories
- # ******************************************************************************
- #set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/install)
- set(ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
- set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
- set(BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
- set(PROJECT_INSTALL_DIR ${CMAKE_INSTALL_PREFIX})
- set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/bin)
- message(STATUS " Project directories:")
- message(STATUS " - project source dir: " ${SOURCE_DIR})
- message(STATUS " - project binary dir: " ${BINARY_DIR})
- message(STATUS " - project build dir: " ${BUILD_DIR})
- message(STATUS " - project install dir: " ${PROJECT_INSTALL_DIR})
- # output directories
- # ******************************************************************************
- set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${BUILD_DIR})
- set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${BUILD_DIR})
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BUILD_DIR})
- set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${BUILD_DIR})
- set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${BUILD_DIR})
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BUILD_DIR})
- set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${BUILD_DIR})
- set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${BUILD_DIR})
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BUILD_DIR})
- # moc
- # ******************************************************************************
- set(CMAKE_INCLUDE_CURRENT_DIR ON)
- set(CMAKE_AUTOMOC ON)
- set(CMAKE_AUTORCC ON)
- set(CMAKE_AUTOUIC ON)
- set_property(GLOBAL PROPERTY USE_FOLDERS ON)
- # project meta information
- # ******************************************************************************
- set(Toou2D_VERSION_MAJOR 1)
- set(Toou2D_VERSION_MINOR 0)
- set(Toou2D_VERSION_PATCH 1)
- set(Toou2D_ORG_NAME ijinjay)
- set(Toou2D_ORG_DOMAIN org)
- message(STATUS "> Configure project: ${PROJECT_NAME} (v${Toou2D_VERSION_MAJOR}.${Toou2D_VERSION_MINOR}.${Toou2D_VERSION_PATCH})")
- # apple rpath
- # ******************************************************************************
- if(APPLE)
- set(CMAKE_SKIP_BUILD_RPATH false)
- set(CMAKE_BUILD_WITH_INSTALL_RPATH false)
- set(CMAKE_INSTALL_RPATH "@executable_path/../Frameworks")
- set(CMAKE_INSTALL_RPATH_USE_LINK_PATH true)
- message(STATUS " rpath: " ${CMAKE_INSTALL_RPATH})
- endif()
- # 构建Toou2D库
- set(Toou2D_QT_VERSION "5.11.1" CACHE STRING "Qt Version")
- set(Toou2D_QT_MODULES Core Gui Widgets Quick Qml Concurrent Network DBus PrintSupport Svg)
- if(UNIX AND NOT APPLE)
- set(Toou2D_QT_MODULES ${Toou2D_QT_MODULES} X11Extras)
- endif()
- # 查找QT5,设置定义
- find_package(Qt5 ${Toou2D_QT_VERSION} EXACT CONFIG REQUIRED ${Toou2D_QT_MODULES})
- add_definitions(${QT_DEFINITIONS})
- add_definitions(-DUSE_INSTALL_TARGET)
- add_definitions(-DQT_DEPRECATED_WARNINGS)
- add_definitions(-DQT_NO_WARNING_OUTPUT)
- add_definitions(-DVERSION_IN="1.0.1")
- add_definitions(-DURI_STR="Toou2D")
- # 添加源文件
- AddLibrarySources("${CMAKE_CURRENT_SOURCE_DIR}/src-toou2d" "Toou2D" list_lib_src list_lib_hdr)
- AddLibrarySources("${CMAKE_CURRENT_SOURCE_DIR}/src-toou2d/controls/gadget" "controls\\gadget" list_lib_src list_lib_hdr)
- AddLibrarySources("${CMAKE_CURRENT_SOURCE_DIR}/src-toou2d/controls/interface" "controls\\interface" list_lib_src list_lib_hdr)
- AddLibrarySources("${CMAKE_CURRENT_SOURCE_DIR}/src-toou2d/theme" "theme" list_lib_src list_lib_hdr)
- # 设置库
- # ******************************************************************************
- set (LIB_NAME Toou2D)
- add_library (${LIB_NAME} SHARED ${list_lib_src} ${list_lib_hdr} ${CMAKE_CURRENT_SOURCE_DIR}/src-toou2d/t2d_res.qrc)
- set_target_properties(${LIB_NAME} PROPERTIES
- LIBRARY_OUTPUT_DIRECTORY ${BUILD_DIR}/${LIB_NAME})
- set_target_properties(${LIB_NAME} PROPERTIES PUBLIC_HEADER "${list_lib_hdr}")
- set(LINK_LIBRARIES PUBLIC Qt5::Core PUBLIC Qt5::Widgets PUBLIC Qt5::Gui PUBLIC Qt5::Quick PUBLIC Qt5::Qml PUBLIC Qt5::Concurrent PUBLIC Qt5::Svg)
- if(UNIX AND NOT APPLE)
- set(LINK_LIBRARIES ${LINK_LIBRARIES} PUBLIC Qt5::X11Extras)
- endif()
- # 链接库
- target_link_libraries(${LIB_NAME} ${LINK_LIBRARIES})
- set(LIB_HDR "${list_lib_hdr}")
- # 构建可执行目标
- # ******************************************************************************
- AddApplicationSources("${SOURCE_DIR}/example" "Example" list_app_src)
- # setup target
- # ******************************************************************************
- if(APPLE)
- set(MACOSX_BUNDLE_BUNDLE_VERSION 1)
- set(MACOSX_BUNDLE_LONG_VERSION_STRING ${Toou2D_VERSION_MAJOR}.${Toou2D_VERSION_MINOR}.${Toou2D_VERSION_PATCH})
- set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${Toou2D_VERSION_MAJOR}.${Toou2D_VERSION_MINOR}.${Toou2D_VERSION_PATCH})
- set(MACOSX_BUNDLE_ICON_FILE ${PROJECT_NAME}.icns)
- set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME})
- set(MACOSX_BUNDLE_RESOURCES ${BUILD_DIR}/${PROJECT_NAME}.app/Contents/Resources)
- set(MACOSX_BUNDLE_ICON ${ROOT_DIR}/icons/develop/${MACOSX_BUNDLE_ICON_FILE})
- add_executable(${PROJECT_NAME} MACOSX_BUNDLE ${list_app_src} ${MACOSX_BUNDLE_ICON} ${SOURCE_DIR}/example/qml.qrc)
- else()
- add_executable(${PROJECT_NAME} ${list_app_src} ${SOURCE_DIR}/example/qml.qrc)
- endif()
- # c++11
- # ******************************************************************************
- if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 3.0)
- set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11)
- set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
- else()
- if(APPLE)
- list(APPEND CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y -stdlib=libc++")
- endif()
- if(UNIX AND NOT APPLE)
- list(APPEND CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
- endif()
- endif()
- # configure files
- # ******************************************************************************
- configure_file(${ROOT_DIR}/cmake/meta_Toou2D.hpp.in ${BINARY_DIR}/meta_Toou2D.hpp)
- if(APPLE)
- configure_file(${ROOT_DIR}/cmake/info.plist.in ${BINARY_DIR}/info.plist)
- endif()
- # target properties
- # ******************************************************************************
- if(APPLE)
- set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${BINARY_DIR}/info.plist)
- endif()
- # includes
- # ******************************************************************************
- target_include_directories(${PROJECT_NAME} PUBLIC ${BINARY_DIR})
- # copy resources
- # ******************************************************************************
- get_target_property(_qmake_executable Qt5::qmake IMPORTED_LOCATION)
- get_filename_component(_qt_bin_dir "${_qmake_executable}" DIRECTORY)
- find_program(DEPLOYQT_EXECUTABLE NAMES windeployqt macdeployqt HINTS "${_qt_bin_dir}")
- set(qmake ${_qmake_executable})
- execute_process(
- COMMAND ${qmake} -query QT_INSTALL_HEADERS
- OUTPUT_VARIABLE QT_INSTALL_HEADERS
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- execute_process(
- COMMAND ${qmake} -query QT_INSTALL_LIBS
- OUTPUT_VARIABLE QT_INSTALL_LIBS
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- execute_process(
- COMMAND ${qmake} -query QT_INSTALL_BINS
- OUTPUT_VARIABLE QT_INSTALL_BINS
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- execute_process(
- COMMAND ${qmake} -query QT_INSTALL_QML
- OUTPUT_VARIABLE QT_INSTALL_QML
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- execute_process(
- COMMAND ${qmake} -query QT_INSTALL_PREFIX
- OUTPUT_VARIABLE QT_INSTALL_PREFIX
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- message("${QT_INSTALL_HEADERS}")
- message("${QT_INSTALL_LIBS}")
- message("${QT_INSTALL_BINS}")
- message("${QT_INSTALL_QML}")
- message("${QT_INSTALL_PREFIX}")
- if(APPLE)
- execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${MACOSX_BUNDLE_RESOURCES})
- execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${MACOSX_BUNDLE_ICON} ${MACOSX_BUNDLE_RESOURCES})
- # add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${ROOT_DIR}/example" ${BUILD_DIR}/${PROJECT_NAME}.app/Contents/Resources)
- add_custom_command(TARGET ${PROJECT_NAME}
- POST_BUILD
- COMMAND ${DEPLOYQT_EXECUTABLE} "$<TARGET_BUNDLE_DIR:${PROJECT_NAME}>" -qmldir="${SOURCE_DIR}/example"
- )
- add_custom_command( TARGET ${LIB_NAME}
- POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${SOURCE_DIR}/src-toou2d/build-preset/plugin.qmltypes $<TARGET_FILE_DIR:${LIB_NAME}>/plugin.qmltypes
- )
- add_custom_command( TARGET ${LIB_NAME}
- POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${SOURCE_DIR}/src-toou2d/build-preset/qmldir $<TARGET_FILE_DIR:${LIB_NAME}>/qmldir
- )
- else()
- add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${ROOT_DIR}/example" ${BUILD_DIR}/Resources)
- # add_custom_target(CopyResources ALL COMMAND ${CMAKE_COMMAND} -E copy_directory "${ROOT_DIR}/res" ${BUILD_DIR}/Resources)
- endif()
- # link
- # ******************************************************************************
- #set(LINK_LIBRARIES PUBLIC ${VTK_LIBRARIES} PUBLIC Qt5::Core PUBLIC Qt5::Widgets PUBLIC Qt5::Gui PUBLIC Qt5::Quick PUBLIC Qt5::Qml PUBLIC Qt5::Concurrent)
- #if(UNIX AND NOT APPLE)
- # set(LINK_LIBRARIES ${LINK_LIBRARIES} PUBLIC Qt5::X11Extras)
- #endif()
- target_link_libraries(${PROJECT_NAME} ${LINK_LIBRARIES} ${LIB_NAME})
- target_include_directories(${PROJECT_NAME} PRIVATE ${LIB_HDR})
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement