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 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) 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") #/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 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:\"$\" -outputresource:\"$\" 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 )