178 lines
5.9 KiB
CMake
178 lines
5.9 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
project(Embalming_Girl)
|
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_AUTOMOC ON)
|
|
set(CMAKE_AUTORCC ON)
|
|
set(CMAKE_AUTOUIC ON)
|
|
|
|
if (NOT DEFINED CMAKE_PREFIX_PATH)
|
|
if (WIN32)
|
|
set(CMAKE_PREFIX_PATH "E:/QT6.6.3/6.6.3/mingw_64")
|
|
else ()
|
|
set(CMAKE_PREFIX_PATH "$ENV{HOME}/Qt6.3/6.6.3/gcc_64")
|
|
endif ()
|
|
endif ()
|
|
|
|
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
|
|
add_compile_options("$<$<CXX_COMPILER_ID:GNU>:-finput-charset=UTF-8>")
|
|
add_compile_options("$<$<CXX_COMPILER_ID:GNU>:-fexec-charset=UTF-8>")
|
|
|
|
find_package(Qt6 COMPONENTS
|
|
Core
|
|
Gui
|
|
Widgets
|
|
WebSockets
|
|
OpenGLWidgets
|
|
Multimedia
|
|
REQUIRED)
|
|
|
|
add_subdirectory(3rdparty/ElaWidgetTools)
|
|
|
|
file(GLOB_RECURSE PROJECT_SOURCES
|
|
"src/*.h"
|
|
"src/*.cpp"
|
|
)
|
|
|
|
set(APP_SOURCES
|
|
main.cpp
|
|
${PROJECT_SOURCES}
|
|
resources.qrc
|
|
)
|
|
|
|
if (WIN32)
|
|
list(APPEND APP_SOURCES app.rc)
|
|
endif ()
|
|
|
|
if (WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Release")
|
|
add_executable(Embalming_Girl WIN32 ${APP_SOURCES})
|
|
else ()
|
|
add_executable(Embalming_Girl ${APP_SOURCES})
|
|
endif ()
|
|
|
|
target_include_directories(Embalming_Girl PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/model
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/network
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/ui
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/voice
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/update
|
|
)
|
|
|
|
target_link_libraries(Embalming_Girl
|
|
Qt::Core
|
|
Qt::Gui
|
|
Qt::Widgets
|
|
Qt::WebSockets
|
|
Qt::OpenGLWidgets
|
|
Qt::Multimedia
|
|
ElaWidgetTools
|
|
)
|
|
|
|
if (WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
|
|
set(DEBUG_SUFFIX)
|
|
if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug")
|
|
set(DEBUG_SUFFIX "d")
|
|
endif ()
|
|
set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}")
|
|
if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
|
|
set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
|
|
if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
|
|
set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
|
|
endif ()
|
|
endif ()
|
|
if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll")
|
|
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory
|
|
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
|
|
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
"${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
|
|
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
|
|
endif ()
|
|
foreach (QT_LIB Core Gui Widgets WebSockets Network OpenGLWidgets OpenGL Multimedia)
|
|
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
"${QT_INSTALL_PATH}/bin/Qt6${QT_LIB}${DEBUG_SUFFIX}.dll"
|
|
"$<TARGET_FILE_DIR:${PROJECT_NAME}>")
|
|
endforeach (QT_LIB)
|
|
endif ()
|
|
|
|
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
"$<TARGET_FILE:ElaWidgetTools>"
|
|
"$<TARGET_FILE_DIR:${PROJECT_NAME}>")
|
|
|
|
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/config"
|
|
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/config")
|
|
|
|
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory
|
|
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/multimedia/")
|
|
|
|
if (EXISTS "${QT_INSTALL_PATH}/plugins/multimedia")
|
|
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${QT_INSTALL_PATH}/plugins/multimedia"
|
|
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/multimedia/")
|
|
endif ()
|
|
|
|
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Res"
|
|
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/Res")
|
|
|
|
# ============ Distribution packaging target ============
|
|
if (WIN32)
|
|
set(DEPLOY_DIR "${CMAKE_BINARY_DIR}/deploy/Embalming_Girl")
|
|
|
|
add_custom_target(deploy
|
|
DEPENDS ${PROJECT_NAME}
|
|
COMMENT "=== Creating distribution package ==="
|
|
|
|
# Clean and create directory
|
|
COMMAND ${CMAKE_COMMAND} -E remove_directory "${DEPLOY_DIR}"
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${DEPLOY_DIR}"
|
|
|
|
# Copy main executable
|
|
COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE:${PROJECT_NAME}>" "${DEPLOY_DIR}/"
|
|
|
|
# Copy ElaWidgetTools DLL
|
|
COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE:ElaWidgetTools>" "${DEPLOY_DIR}/"
|
|
|
|
# Run windeployqt to copy Qt DLLs + plugins + compiler runtime
|
|
COMMAND "${QT_INSTALL_PATH}/bin/windeployqt.exe"
|
|
--no-translations
|
|
--no-system-d3d-compiler
|
|
--no-opengl-sw
|
|
"$<$<CONFIG:Debug>:--debug>$<$<CONFIG:Release>:--release>"
|
|
"${DEPLOY_DIR}/$<TARGET_FILE_NAME:${PROJECT_NAME}>"
|
|
|
|
# Copy multimedia plugins (windeployqt may miss these)
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${DEPLOY_DIR}/plugins/multimedia"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${QT_INSTALL_PATH}/plugins/multimedia"
|
|
"${DEPLOY_DIR}/plugins/multimedia"
|
|
|
|
# Copy game resources
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Res"
|
|
"${DEPLOY_DIR}/Res"
|
|
|
|
# Copy config
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/config"
|
|
"${DEPLOY_DIR}/config"
|
|
|
|
# Copy updater.exe (built from Go server project)
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/../Embalming_Girl_Updater/updater.exe"
|
|
"${DEPLOY_DIR}/updater.exe"
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E echo "=== Package created at: ${DEPLOY_DIR} ==="
|
|
)
|
|
endif ()
|