COMPASSi/trunk/code/CMakeLists.txt

308 lines
10 KiB
CMake
Raw Permalink Normal View History

2025-06-25 15:06:42 +08:00
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("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/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)