DYTSrouce/src/CMakeLists.txt
2025-11-02 14:52:34 +08:00

234 lines
6.4 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PROJECT(Dyt)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
SET(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets LinguistTools REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets LinguistTools OpenGL REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Widgets LinguistTools DataVisualization Charts Network REQUIRED)
message("qt VERSION " ${QT_VERSION_MAJOR})
FILE(GLOB_RECURSE HEADER_FILES ./*.h common/*.h common/*.hpp model/*.h app/*.h utils/*.h)
FILE(GLOB_RECURSE CPP_FILES ./*.cpp common/*.cpp model/*.cpp app/*.cpp utils/*.cpp)
FILE(GLOB_RECURSE CC_FILES ./*.cc)
FILE(GLOB_RECURSE UI_FILES ./*.ui)
FILE(GLOB_RECURSE QRC_FILES ./*.qrc)
FILE(GLOB_RECURSE RC_FILES ./res/*.rc)
SET(
TS_FILES
${CMAKE_CURRENT_SOURCE_DIR}/translations/Dyt_zh_CN.ts
)
# 控制是否在构建时自动运行 lupdate 更新 TS 文件。
# 关闭时仅在 TS 变更后编译生成 QM避免每次构建都重新创建翻译文件。
option(UPDATE_TRANSLATIONS "Run lupdate to refresh TS files during build" OFF)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
if(UPDATE_TRANSLATIONS)
# 运行 lupdate + lrelease更新 TS 并生成 QM可能导致每次构建都触发
qt6_create_translation(QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${TS_FILES})
else()
# 仅生成 QMTS 未变化时不重新创建
qt_add_translations(QM_FILES TS_FILES ${TS_FILES})
endif()
add_custom_target(translations DEPENDS ${QM_FILES})
else()
if(UPDATE_TRANSLATIONS)
# 运行 lupdate + lrelease
qt5_create_translation(QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${TS_FILES})
else()
# 仅运行 lrelease 生成 QM
qt5_add_translation(QM_FILES ${TS_FILES})
endif()
add_custom_target(translations DEPENDS ${QM_FILES})
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS WinExtras REQUIRED)
endif()
if(NOT QT_TRANSLATIONS_DIR)
get_target_property(QT${QT_VERSION_MAJOR}_QMAKE_EXECUTABLE Qt${QT_VERSION_MAJOR}::qmake IMPORTED_LOCATION)
execute_process( COMMAND ${QT6_QMAKE_EXECUTABLE} -query QT_INSTALL_TRANSLATIONS
OUTPUT_VARIABLE qt_translations_dir OUTPUT_STRIP_TRAILING_WHITESPACE )
file( TO_CMAKE_PATH "${qt_translations_dir}" qt_translations_dir)
set( QT_TRANSLATIONS_DIR ${qt_translations_dir} CACHE PATH
"The location of the Qt translations" FORCE)
endif()
add_definitions(-DFMT_UNICODE=0)
install(
FILES
${QM_FILES}
DESTINATION
${CMAKE_CURRENT_SOURCE_DIR}/translations
)
SET(
CONFIG_PATH
${CMAKE_CURRENT_SOURCE_DIR}/config/
)
SET(
THIRTY_PATH
${Thirdparty}/
)
configure_file(
${PROJECT_SOURCE_DIR}/config.cpp.in
${PROJECT_BINARY_DIR}/config.cpp
)
SET(
ALL_FILES
${HEADER_FILES}
${CPP_FILES}
${CC_FILES}
${UI_FILES}
${QRC_FILES}
${RC_FILES}
${QM_FILES}
${PROJECT_BINARY_DIR}/config.cpp
${PROJECT_SOURCE_DIR}/${PROJECT_NAME}.manifest
)
INCLUDE_DIRECTORIES(
${PROJECT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
${Thirdparty}/spdlog/include
${Thirdparty}/breakpad/include
${Thirdparty}/3rdparty_vc15/include
${Thirdparty}/OSG-3.5.1/include
${Thirdparty}/OSGEARTH-2.8/include
${Thirdparty}/TritonSDK/PublicHeaders
${Thirdparty}/matlab/include
# ${Thirdparty}/Python39/include
)
LINK_DIRECTORIES(
${Thirdparty}/spdlog/lib
${Thirdparty}/3rdparty_vc15/lib
${Thirdparty}/OSG-3.5.1/lib
${Thirdparty}/OSGEARTH-2.8/lib
${Thirdparty}/matlab/lib/win64/microsoft
${Thirdparty}/TritonSDK/lib/vc143/x64
# ${Thirdparty}/Python39/libs
)
if(MSVC)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi /Od") #/Od
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")
foreach(var
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO
)
if(${var} MATCHES "/MD")
string(REGEX REPLACE "/MD" "/MT" ${var} "${${var}}")
endif()
endforeach()
endif(MSVC)
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
endif()
endif(NOT MSVC)
SOURCE_GROUP_BY_DIR(ALL_FILES)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 5)
add_executable(${PROJECT_NAME}
WIN32
${ALL_FILES}
)
endif()
if(MINGW OR MSVC)
target_compile_definitions(${PROJECT_NAME} PRIVATE
UNICODE _UNICODE
)
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "/MP")
endif()
target_link_libraries(
${PROJECT_NAME}
PRIVATE
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Charts
Qt${QT_VERSION_MAJOR}::DataVisualization
Qt${QT_VERSION_MAJOR}::Network
Qt${QT_VERSION_MAJOR}::OpenGL
spdlog
OpenThreads
osg
osgAnimation
osgDB
osgFX
osgGA
osgManipulator
osgUtil
osgViewer
osgShadow
osgParticle
osgSim
osgWidget
osgText
osgEarth
osgEarthUtil
Triton-MT-DLL
libeng
libmx
libmat
# python39
)
if(${QT_VERSION_MAJOR} LESS 6)
target_link_libraries(
${PROJECT_NAME}
PRIVATE
Qt${QT_VERSION_MAJOR}::WinExtras
)
endif()
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${ProjectDIR}/bin)
TARGET_LINK_LIBRARIES(${PROJECT_NAME})
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE")
add_custom_command(TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND mt.exe
-manifest \"${CMAKE_CURRENT_SOURCE_DIR}\\${PROJECT_NAME}.manifest\"
-inputresource:\"$<TARGET_FILE:${PROJECT_NAME}>\"
-outputresource:\"$<TARGET_FILE:${PROJECT_NAME}>\"
COMMAND ${CMAKE_COMMAND} -E copy_directory
${ProjectDIR}/resources
${ProjectDIR}/bin/Release/resources
COMMAND ${CMAKE_COMMAND} -E copy_directory
${ProjectDIR}/workspace
${ProjectDIR}/bin/Release/workspace
COMMAND ${CMAKE_COMMAND} -E copy_directory
${ProjectDIR}/src/translations/
${ProjectDIR}/bin/Release/translations
#
# COMMAND ${CMAKE_COMMAND} -E copy_directory
# ${Thirdparty}/libcef/resources
# ${ProjectDIR}/bin/Debug
)