DYTSrouce/src/CMakeLists.txt

208 lines
5.4 KiB
CMake
Raw Normal View History

2025-01-04 04:12:51 +00:00
PROJECT(Dyt)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
SET(CMAKE_CXX_STANDARD 17)
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 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)
FILE(GLOB_RECURSE CPP_FILES ./*.cpp common/*.cpp model/*.cpp app/*.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
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt6_create_translation(QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${TS_FILES})
add_custom_target(translations DEPENDS ${QM_FILES})
else()
qt5_create_translation(QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${TS_FILES})
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_x64/include
${Thirdparty}/OpenSceneGraph-3.6.5/include
${Thirdparty}/TritonSDK/PublicHeaders
${Thirdparty}/matlab/include
# ${Thirdparty}/Python39/include
)
LINK_DIRECTORIES(
${Thirdparty}/spdlog/lib
${Thirdparty}/3rdParty_x64/lib
${Thirdparty}/OpenSceneGraph-3.6.5/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")
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
spdlog
OpenThreads
osg
osgAnimation
osgDB
osgFX
osgGA
osgManipulator
osgUtil
osgViewer
osgShadow
osgParticle
osgSim
osgEarth
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
# ${Thirdparty}/libcef/resources
# ${ProjectDIR}/bin/Debug
)