Last active
September 27, 2019 07:57
-
-
Save ijinjay/696ef075e68c23357cb2844254e22985 to your computer and use it in GitHub Desktop.
Toou2D cmake
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function(AddApplicationSources rel_path group_name list_src) | |
message(STATUS " Add Application Src > ${rel_path} >> ${group_name}") | |
#target_include_directories(${target} PUBLIC ${rel_path}) | |
include_directories(${rel_path}) | |
file(GLOB list_globbed "${rel_path}/*.h" "${rel_path}/*.cpp" "${rel_path}/*.cxx" "${rel_path}/*.hpp") | |
foreach(file ${list_globbed}) | |
message(STATUS " - ${file}") | |
endforeach() | |
set(list_return ${list_globbed} ${${list_src}}) | |
set(${list_src} ${list_return} PARENT_SCOPE) | |
source_group(${group_name} FILES ${list_globbed}) | |
endfunction() | |
function(AddLibrarySources rel_path group_name list_src list_hdr) | |
message(STATUS " Add Library Src > ${rel_path} >> ${group_name}") | |
#target_include_directories(${target} PUBLIC ${rel_path}) | |
include_directories(${rel_path}) | |
file(GLOB list_globbed_src "${rel_path}/*.cpp" "${rel_path}/*.cxx") | |
file(GLOB list_globbed_hdr "${rel_path}/*.h" "${rel_path}/*.hpp") | |
foreach(file ${list_globbed_hdr}) | |
message(STATUS " - ${file}") | |
endforeach() | |
set(list_return_hdr ${list_globbed_hdr} ${${list_hdr}}) | |
set(list_return_src ${list_globbed_src} ${${list_src}}) | |
set(${list_hdr} ${list_return_hdr} PARENT_SCOPE) | |
set(${list_src} ${list_return_src} PARENT_SCOPE) | |
source_group(${group_name} FILES ${list_globbed_hdr} ${list_globbed_src}) | |
endfunction() | |
function(AddResources rel_path group_name list_res) | |
message(STATUS " > ${rel_path} >> ${group_name}") | |
# include_directories(${PROJECT_ROOT_DIR}/res/${rel_path}) | |
file(GLOB list_globbed "${rel_path}/*.qml" "${rel_path}/*.png" "${rel_path}/*.ttf" "${rel_path}/*.js" "${rel_path}/*.json" "${rel_path}/*.cfg") | |
foreach(file ${list_globbed}) | |
message(STATUS " - ${file}") | |
endforeach() | |
source_group(${group_name} FILES ${list_globbed}) | |
set(list_return ${list_globbed} ${${list_res}}) | |
set(${list_res} ${list_return} PARENT_SCOPE) | |
endfunction() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
新建文件夹为icon | |
内部放置三个文件夹 | |
icons/develop/Toou2DExample.icns | |
icons/release/Toou2DExample.icns | |
icons/testing/Toou2DExample.icns |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |
<plist version="1.0"> | |
<dict> | |
<key>CFBundleDevelopmentRegion</key> | |
<string>English</string> | |
<key>CFBundleExecutable</key> | |
<string>@MACOSX_BUNDLE_BUNDLE_NAME@</string> | |
<key>CFBundleIconFile</key> | |
<string>@MACOSX_BUNDLE_ICON_FILE@</string> | |
<key>CFBundleIdentifier</key> | |
<string>Q</string> | |
<key>CFBundleInfoDictionaryVersion</key> | |
<string>@MACOSX_BUNDLE_BUNDLE_VERSION@</string> | |
<key>CFBundleName</key> | |
<string>@MACOSX_BUNDLE_BUNDLE_NAME@</string> | |
<key>CFBundlePackageType</key> | |
<string>APPL</string> | |
<key>CFBundleShortVersionString</key> | |
<string>@MACOSX_BUNDLE_BUNDLE_VERSION@</string> | |
<key>CFBundleSignature</key> | |
<string>????</string> | |
<key>CFBundleVersion</key> | |
<string>@MACOSX_BUNDLE_BUNDLE_VERSION@</string> | |
<key>CSResourcesFileMapped</key> | |
<true/> | |
<key>LSApplicationCategoryType</key> | |
<string>public.app-category.developer-tools</string> | |
<key>NSHumanReadableCopyright</key> | |
<string>@MACOSX_BUNDLE_COPYRIGHT@</string> | |
<key>NSHighResolutionCapable</key> | |
<true/> | |
</dict> | |
</plist> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
namespace Toou2D | |
{ | |
struct Meta | |
{ | |
static constexpr auto appName = "@PROJECT_NAME@"; | |
static constexpr auto orgName = "@Toou2D_ORG_NAME@"; | |
static constexpr auto orgDomain = "@Toou2D_ORG_DOMAIN@"; | |
static constexpr auto versionString = | |
"@Toou2D_VERSION_MAJOR@.@Toou2D_VERSION_MINOR@.@Toou2D_VERSION_" | |
"PATCH@"; | |
}; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment