cmake_minimum_required(VERSION 3.5) # CMake install : https://cmake.org/download/ project(COMPASSi) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) IF(MSVC) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") #SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") ENDIF(MSVC) if(WIN32) add_definitions(-DCOMPASS_WINDOWS) add_compile_options("$<$:/utf-8>") add_compile_options("$<$:/utf-8>") set(CMAKE_DEBUG_POSTFIX "d") # 设置输出目录 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin") if(CMAKE_BUILD_TYPE STREQUAL "Debug") link_directories(${CMAKE_CURRENT_SOURCE_DIR}/bin/Debug) set(LOGOICO "${CMAKE_CURRENT_SOURCE_DIR}/bin/Debug/logo.rc") elseif(CMAKE_BUILD_TYPE STREQUAL "Release") link_directories(${CMAKE_CURRENT_SOURCE_DIR}/bin/Release) set(LOGOICO "${CMAKE_CURRENT_SOURCE_DIR}/bin/Release/logo.rc") endif() else() if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build." FORCE) endif() add_definitions(-DCOMPASS_UNIX) add_compile_options(-fPIC) add_compile_options(-fpermissive) set(CMAKE_DEBUG_POSTFIX "d") if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm|aarch64") message(STATUS "Detected ARM architecture.") #set(Qt5_DIR "/home/xt/DP/INTESIM_compileThirdParty/qt-everywhere-opensource-src-5.15.4/qt-everywhere-src-5.15.4/_install/lib/cmake/Qt5") set(Qt5_DIR "/opt/Qt5.15.4/lib/cmake/Qt5") #add_compile_options(-fpack-struct=8) # 设置结构体的对齐 #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpack-struct=8") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/arm_linux_bin/${CMAKE_BUILD_TYPE}/lib") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/arm_linux_bin/${CMAKE_BUILD_TYPE}/lib") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/arm_linux_bin/${CMAKE_BUILD_TYPE}") link_directories(${CMAKE_CURRENT_SOURCE_DIR}/arm_linux_bin/${CMAKE_BUILD_TYPE}/lib) set(LOGOICO "${CMAKE_CURRENT_SOURCE_DIR}/arm_linux_bin/${CMAKE_BUILD_TYPE}/logo.rc") else() message(STATUS "Detected non-ARM architecture.") set(CMAKE_PREFIX_PATH "/opt/Qt/5.15.2/gcc_64") # 替换为您的 Qt 安装路径 link_directories(${CMAKE_CURRENT_SOURCE_DIR}/linux_bin) endif() endif() find_package(Qt5 REQUIRED COMPONENTS Core Svg Gui Widgets WebChannel WebEngineWidgets Sql Xml) # Qt COMPONENTS if(Qt5_FOUND) message(STATUS "Qt5 found.") else() message(FATAL_ERROR "Qt5 not found.") endif() set(PROJECTS_PATH ${CMAKE_CURRENT_SOURCE_DIR}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/3rd/pugixml-1.15/src) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc/Application) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/3rd) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc/Common) #include_directories(${CMAKE_CURRENT_SOURCE_DIR}/3rd/CCSReport/include) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/3rd/CCSReport_2/include) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc/DataManager/DataManagerInterface/include) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc/DataManager/Infrastructure.Interface/Arithmetics) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc/DataManager/Infrastructure.Data) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc/DataManager/Logic/Logic.DataManagement/Interpreters) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc/DataManager/Logic/Logic.DataManagement/Utility) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc/InlandModel) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc/InlandModel/StabilityModelInterface) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc/InlandModel/StructureModelInterface) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc/InlandModel/CertiModelInterface) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc/Util/include) include_directories(${PROJECTS_PATH}/inc/OCC/OCCLib/) include_directories(${PROJECTS_PATH}/inc/OCC/OCCModeling/) include_directories(${PROJECTS_PATH}/inc/) include_directories(${PROJECTS_PATH}/inc/ReadDXF) include_directories(${PROJECTS_PATH}/inc/DataManager/XmlSerialization) include_directories(${PROJECTS_PATH}/inc/DataManager/XSDHeader) if(WIN32) include_directories(${PROJECTS_PATH}/3rd/occ/win64/include) include_directories(${PROJECTS_PATH}/3rd/spdlog/win64/include) include_directories(${PROJECTS_PATH}/3rd/xerces-c/win64/include) include_directories(${PROJECTS_PATH}/3rd/xlnt/win64/include) else() include_directories(${PROJECTS_PATH}/3rd/occ/arm_linux/include) include_directories(${PROJECTS_PATH}/3rd/spdlog/arm_linux/include) include_directories(${PROJECTS_PATH}/3rd/xerces-c/arm_linux/include) include_directories(${PROJECTS_PATH}/3rd/xlnt/arm_linux/include) endif() file(GLOB srcs_application "${CMAKE_CURRENT_SOURCE_DIR}/projects/Application/*.cpp") file(GLOB hdrs_application "${CMAKE_CURRENT_SOURCE_DIR}/inc/Application/*.h") source_group("Application\\Source" FILES ${srcs_application}) source_group("Application\\Headers" FILES ${hdrs_application}) file(GLOB srcs_Common "${CMAKE_CURRENT_SOURCE_DIR}/inc/Common/*.h") source_group("Common" FILES ${srcs_Common}) if(WIN32) link_directories(${PROJECTS_PATH}/bin/${CMAKE_BUILD_TYPE}) else() if(CMAKE_BUILD_TYPE STREQUAL "Debug") if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm|aarch64") elseif (DEFINED ENV{CMAKE_VS_CODE}) link_directories(${PROJECTS_PATH}/build/debug) else() link_directories(${PROJECTS_PATH}/linux_bin/debug) endif() else() if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm|aarch64") elseif (DEFINED ENV{CMAKE_VS_CODE}) link_directories(${PROJECTS_PATH}/build/release) else() link_directories(${PROJECTS_PATH}/linux_bin/release) endif() endif() endif() add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rd/pugixml-1.15) #add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rd/CCSReport) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rd/CCSReport_2) #add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/projects/XmlSerialization) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/projects/Util) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/projects/DataManager) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/projects/InlandModel) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/projects/OCC) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/projects/ReadDXF) add_executable(${PROJECT_NAME} ${srcs_application} ${hdrs_application} ${srcs_Common} ${LOGOICO} ) # 添加日志头文件 target_include_directories(COMPASSi PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/3rd/spdlog) # 添加库文件搜索路径 if(WIN32) target_link_directories(${PROJECT_NAME} PRIVATE ${PROJECTS_PATH}/3rd/occ/win64/lib64 ${PROJECTS_PATH}/3rd/spdlog/win64/lib ${PROJECTS_PATH}/3rd/xerces-c/win64/lib ${PROJECTS_PATH}/3rd/xlnt/win64/lib ${PROJECTS_PATH}/bin/${CMAKE_BUILD_TYPE} ) else() target_link_directories(${PROJECT_NAME} PRIVATE ${PROJECTS_PATH}/3rd/occ/arm_linux/lib ${PROJECTS_PATH}/3rd/spdlog/arm_linux/lib ${PROJECTS_PATH}/3rd/xerces-c/arm_linux/lib ${PROJECTS_PATH}/3rd/xlnt/arm_linux/lib ${PROJECTS_PATH}/bin/${CMAKE_BUILD_TYPE}/lib ) endif() if(WIN32) target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Widgets Qt5::Core Qt5::Gui Qt5::WebChannel Qt5::WebEngineWidgets Qt5::Xml Qt5::Sql TKVRML TKSTL TKBRep TKIGES TKShHealing TKSTEP TKXSBase TKernel TKBool TKCDF TKDraw TKFeat TKFillet TKG2d TKG3d TKGeomAlgo TKGeomBase TKHLR TKMath TKOffset TKPrim TKService TKTopAlgo TKV3d TKBO TKMesh #TKOpenGl ReadDXF OCCModeling xerces-c ) # Qt5 Shared Library else() target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Widgets Qt5::Core Qt5::Gui Qt5::WebChannel Qt5::WebEngineWidgets Qt5::Xml Qt5::Sql TKVRML TKSTL TKBRep TKIGES TKShHealing TKSTEP TKXSBase TKernel TKBool TKCDF TKDraw TKFeat TKFillet TKG2d TKG3d TKGeomAlgo TKGeomBase TKHLR TKMath TKOffset TKPrim TKService TKTopAlgo TKV3d TKBO TKMesh #TKOpenGl ReadDXF OCCModeling pthread xerces-c ) # Qt5 Shared Library endif() # 在主目标前显式声明子项目依赖关系 add_dependencies(DataManager Util) add_dependencies(InlandModel DataManager) #add_dependencies(${PROJECT_NAME} CCSReport InlandModel) add_dependencies(${PROJECT_NAME} CCSReport_2 InlandModel) if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_link_libraries(${PROJECT_NAME} PUBLIC InlandModeld) target_link_libraries(${PROJECT_NAME} PUBLIC DataManagerd) target_link_libraries(${PROJECT_NAME} PUBLIC OCCModelingd) target_link_libraries(${PROJECT_NAME} PUBLIC Utild) #target_link_libraries(${PROJECT_NAME} PUBLIC CCSReportd) target_link_libraries(${PROJECT_NAME} PUBLIC CCSReport_2d) target_link_libraries(${PROJECT_NAME} PUBLIC pugixmld) target_link_libraries(${PROJECT_NAME} PUBLIC spdlogd) target_link_libraries(${PROJECT_NAME} PUBLIC xlntd) else() target_link_libraries(${PROJECT_NAME} PUBLIC InlandModel) target_link_libraries(${PROJECT_NAME} PUBLIC DataManager) target_link_libraries(${PROJECT_NAME} PUBLIC OCCModeling) target_link_libraries(${PROJECT_NAME} PUBLIC Util) #target_link_libraries(${PROJECT_NAME} PUBLIC CCSReport) target_link_libraries(${PROJECT_NAME} PUBLIC CCSReport_2) target_link_libraries(${PROJECT_NAME} PUBLIC pugixml) target_link_libraries(${PROJECT_NAME} PUBLIC spdlog) target_link_libraries(${PROJECT_NAME} PUBLIC xlnt) endif() set(OUT_PROJECT_NAME ${PROJECT_NAME}) #add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/projects/cpack)