123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- #-----------------------------------------------------------------------------
- # 工程属性设置
- #-----------------------------------------------------------------------------
- # 指定所需cmake的最低版本
- cmake_minimum_required(VERSION 3.21 FATAL_ERROR)
- # 设置项目名称 语言
- project(FastCAE)
- #-----------------------------------------------------------------------------
- # 编译系统设置
- #-----------------------------------------------------------------------------
- # c++语言标准
- set(CMAKE_CXX_STANDARD 11)
- # 指定是否使用编译器特定的扩展
- set(CMAKE_CXX_EXTENSIONS OFF)
- # 是否强制要求C++标准为${CMAKE_CXX_STANDARD},如果为OFF则可能使用旧的标准
- set(CMAKE_CXX_STANDARD_REQUIRED ON)
- # 默认编译动态库
- set(BUILD_SHARED_LIBS ON)
- #-----------------------------------------------------------------------------
- # 检测操作系统
- #-----------------------------------------------------------------------------
- if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
- set(FASTCAE_LINUX True)
- if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
- set(CMAKE_INSTALL_PREFIX "/opt/${PROJECT_NAME}" CACHE PATH "${PROJECT_NAME}的安装路径" FORCE)
- endif()
- elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
- set(FASTCAE_WIN True)
- if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
- set(CMAKE_INSTALL_PREFIX "c:/Program Files/${PROJECT_NAME}" CACHE PATH "${PROJECT_NAME}的安装路径" FORCE)
- endif()
- else()
- message(SEND_ERROR "No Support System!")
- endif()
- if (NOT DEFINED Qt5_DIR)
- if(FASTCAE_LINUX)
- set(Qt5_DIR "/opt/Qt5.14.2/5.14.2/gcc_64/lib/cmake/Qt5" CACHE PATH "Qt5Config.cmake所在目录" FORCE)
- elseif(FASTCAE_WIN)
- set(Qt5_DIR "D:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5" CACHE PATH "Qt5Config.cmake所在目录" FORCE)
- endif()
- endif()
- #-----------------------------------------------------------------------------
- # 测试环境定义(如果在支持cmake系统的IDE中编写代码,可以打开以下注释,并将路径修改为自己的Qt路径)
- #-----------------------------------------------------------------------------
- #[[set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/install")
- message(STATUS "${PROJECT_NAME} will be installed to ${CMAKE_INSTALL_PREFIX}")
- if (NOT DEFINED Qt5_DIR)
- if(FASTCAE_LINUX)
- set(Qt5_DIR "/opt/Qt5.14.2/5.14.2/gcc_64/lib/cmake/Qt5" CACHE PATH "Qt5Config.cmake所在目录" FORCE)
- elseif(FASTCAE_WIN)
- set(Qt5_DIR "D:/software/Qt/Qt5.14.2/5.14.2/msvc2017_64/lib/cmake/Qt5" CACHE PATH "Qt5Config.cmake所在目录" FORCE)
- endif()
- endif()]]
- #-----------------------------------------------------------------------------
- # 编译选项设置
- #-----------------------------------------------------------------------------
- # 是否需要编译调试程序
- option(FASTCAE_ENABLE_DEV "ON:开启代码调试,OFF:仅安装程序" ON)
- # 是否自动下载依赖库
- option(FASTCAE_AUTO_DOWNLOAD "如果extlib不存在,则自动下载(git)依赖库" ON)
- option(FASTCAE_ENABLE_OPENMP "使用OpenMP" OFF)
- option(FASTCAE_ENABLE_MPI "使用MPI" OFF)
- option(FASTCAE_DOXYGEN_DOC "生成Doxygen文档" OFF)
- option(FASTCAE_INSTALLATION_PACKAGE "生成${PROJECT_NAME}安装包" ON)
- option(FASTCAE_DEBUG_INFO "输出调试信息" ON)
- #-----------------------------------------------------------------------------
- # 指定编译选项
- #-----------------------------------------------------------------------------
- # 仅对单配制编译器(Makefile Generators or Ninja)生效
- if(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE "Release")
- endif()
- if (POLICY CMP0091)
- cmake_policy(SET CMP0091 NEW)
- endif (POLICY CMP0091)
- if(MSVC)
- add_definitions(-DUNICODE -D_UNICODE)
- add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
- add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
- add_compile_options(
- $<$<CONFIG:>:/MD>
- $<$<CONFIG:Debug>:/MDd>
- $<$<CONFIG:Release>:/MD>
- )
- endif()
- #-----------------------------------------------------------------------------
- # 从系统查找OpenMP(动态库引入使用:OpenMP::OpenMP_CXX)
- #-----------------------------------------------------------------------------
- if(FASTCAE_ENABLE_OPENMP)
- find_package(OpenMP)
- if(OpenMP_CXX_FOUND)
- add_definitions(-DFASTCAE_HAS_OPENMP)
- endif()
- endif()
- #-----------------------------------------------------------------------------
- # 从系统查找MPI(头文件路径:${MPI_CXX_INCLUDE_DIRS} 动态库引入使用:MPI::MPI_CXX)
- #-----------------------------------------------------------------------------
- if(FASTCAE_ENABLE_MPI)
- find_package(MPI)
- if(MPI_CXX_FOUND)
- add_definitions(-DFASTCAE_HAS_MPI)
- endif()
- endif()
- #-----------------------------------------------------------------------------
- # 输出调试信息
- #-----------------------------------------------------------------------------
- if(FASTCAE_DEBUG_INFO)
- add_definitions(-DOUTPUT_DEBUG_INFO)
- endif()
- #-----------------------------------------------------------------------------
- # 从系统查找Qt模块,开启Qt中间文件的自动生成
- #-----------------------------------------------------------------------------
- set(CMAKE_AUTOUIC ON)
- set(CMAKE_AUTOMOC ON)
- set(CMAKE_AUTORCC ON)
- list(APPEND QtNeededModules
- Core
- Widgets
- Gui
- Xml
- Svg # Qwt
- OpenGL # Qwt
- PrintSupport # QwtPolar
- DBus
- )
- if(FASTCAE_LINUX)
- list(APPEND QtNeededModules XcbQpa)
- endif()
- find_package(Qt5 COMPONENTS ${QtNeededModules} REQUIRED)
- if(Qt5_FOUND)
- message(STATUS "Found Qt5: ${Qt5_DIR}")
- if(Qt5_POSITION_INDEPENDENT_CODE)
- set(CMAKE_POSITION_INDEPENDENT_CODE ON)
- endif()
- else()
- set(Qt5_DIR "Qt5_DIR-NOTFOUND" CACHE PATH "Qt5_DIR")
- endif()
- #-----------------------------------------------------------------------------
- # 从远程检索依赖库
- #-----------------------------------------------------------------------------
- if(FASTCAE_AUTO_DOWNLOAD AND NOT EXISTS ${CMAKE_SOURCE_DIR}/extlib)
- if(FASTCAE_WIN)
- set(_extlibGitAddr "https://gitee.com/DISOGitee/FastCAEWinExtlib.git")
- elseif(FASTCAE_LINUX)
- set(_extlibGitAddr "https://gitee.com/DISOGitee/FastCAELinuxExtlib.git")
- endif()
- find_package(Git REQUIRED)
- if(Git_FOUND)
- execute_process(
- COMMAND
- ${GIT_EXECUTABLE} clone ${_extlibGitAddr} extlib
- WORKING_DIRECTORY
- ${CMAKE_CURRENT_SOURCE_DIR}
- RESULT_VARIABLE _status
- )
- else()
- message(FATAL_ERROR "Not Found Git")
- message(STATUS "Please execute the command[git clone ${_extlibGitAddr} extlib] under the directory ${CMAKE_SOURCE_DIR}")
- endif()
- endif()
- #-----------------------------------------------------------------------------
- # 引入FastCAE的依赖库
- #-----------------------------------------------------------------------------
- list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
- # VTK
- find_package(VTK REQUIRED)
- # OpenCASCADE
- find_package(OpenCASCADE REQUIRED)
- # Qwt
- find_package(Qwt REQUIRED)
- # HDF5
- find_package(HDF5 REQUIRED)
- # CGNS
- find_package(CGNS REQUIRED)
- # TecIO
- find_package(TecIO REQUIRED)
- # QuaZIP
- find_package(QuaZIP REQUIRED)
- # Gmsh
- find_package(Gmsh REQUIRED)
- # Python
- find_package(Python REQUIRED)
- #-----------------------------------------------------------------------------
- # 检索系统python(需要修改cmake搜索路径)
- #-----------------------------------------------------------------------------
- #find_package(PythonInterp REQUIRED)
- #find_package(Python COMPONENTS Interpreter Development REQUIRED)
- #-----------------------------------------------------------------------------
- # 开启项目分组
- #-----------------------------------------------------------------------------
- set_property(GLOBAL PROPERTY USE_FOLDERS ON)
- # 可以修改cmake预定义的target分组名称
- #set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "Predefined")
- #-----------------------------------------------------------------------------
- # 定义GNU标准的安装目录(GNUInstallDirs.cmake)
- #-----------------------------------------------------------------------------
- include(GNUInstallDirs)
- set(CMAKE_INSTALL_LIBDIR "lib")
- #-----------------------------------------------------------------------------
- # 定义项目构建中间文件的生成目录
- #-----------------------------------------------------------------------------
- if(FASTCAE_WIN)
- set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/Debug)
- set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/Debug)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/Debug)
- set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/Release)
- set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/Release)
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/Release)
- if(FASTCAE_ENABLE_DEV)
- set(DEVRUNTIME_BINDIR_DEBUG ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG})
- set(DEVRUNTIME_BINDIR_RELEASE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE})
- endif()
- elseif(FASTCAE_LINUX)
- set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
- set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
- if(FASTCAE_ENABLE_DEV)
- set(DEVRUNTIME_BINDIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
- set(DEVRUNTIME_LIBDIR ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
- endif()
- endif()
- #-----------------------------------------------------------------------------
- # 定义变量作为项目的安装路径
- #-----------------------------------------------------------------------------
- set(INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR})
- if(FASTCAE_WIN)
- set(INSTALL_LIBDIR ${CMAKE_INSTALL_BINDIR})
- else()
- set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR})
- endif()
- #set(INSTALL_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR})
- #-----------------------------------------------------------------------------
- # 编译位置无关的代码
- #-----------------------------------------------------------------------------
- set(CMAKE_POSITION_INDEPENDENT_CODE ON)
- # 定义源码路径
- add_subdirectory(src)
- #-----------------------------------------------------------------------------
- # 单元测试Ctest
- #-----------------------------------------------------------------------------
- option(FASTCAE_ENABLE_TEST "开启单元测试(尚未开发完成)" OFF)
- if(FASTCAE_ENABLE_TEST)
- # 开启测试
- enable_testing()
- #添加测试项目
- add_subdirectory(test)
- endif()
- #-----------------------------------------------------------------------------
- # 生成文档(Doxygen + Breathe + Sphinx)
- #-----------------------------------------------------------------------------
- if(FASTCAE_DOXYGEN_DOC)
- find_package(Doxygen REQUIRED)
- if(DOXYGEN_FOUND)
- message(STATUS "Found doc generate Tool: Doxygen")
- include(UseDoxygen)
- # 文档生成依赖Python解释器、Sphinx
- #[[find_package(PythonInterp)
- find_package(Sphinx)
-
- if(PYTHONINTERP_FOUND AND SPHINX_FOUND)
- message(STATUS "Found doc generate Tool: Sphinx")
- include(FindPythonModule)
- # Python的breathe模块负责协调Doxygen和Sphinx
- find_python_module(breathe REQUIRED)
- if(breathe_FOUND)
- message(STATUS "Python module(breathe) version: ${breathe_VERSION}")
- include(UseSphinx)
- else()
- message(STATUS "Generate sphinx documentation need python module: breathe")
- endif()
-
- endif()]]
- endif()
- endif()
- #-----------------------------------------------------------------------------
- # 安装包生成(windows环境光需要NSIS 3.03+)
- #-----------------------------------------------------------------------------
- if(FASTCAE_INSTALLATION_PACKAGE)
- if (FASTCAE_WIN)
- find_program(NSIS_EXECUTABLE NSIS.exe)
- # WIX尚未调试,暂时取消
- #find_program(WIX_EXECUTABLE candle.exe)
- #if(NSIS_EXECUTABLE OR WIX_EXECUTABLE)
- if(NSIS_EXECUTABLE)
- include(${CMAKE_SOURCE_DIR}/cmake/CMakePack.cmake)
- endif()
- else()
- include(${CMAKE_SOURCE_DIR}/cmake/CMakePack.cmake)
- endif ()
- # 以下include必须放在主CMakeLists.txt文件最后面,否则在Visual Studio中不会生成PACKAGE(打包)目标
- include(CPack)
- endif()
|