123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- cmake_minimum_required(VERSION 3.16)
- # 获取版本信息
- file(READ ${CMAKE_SOURCE_DIR}/version aFunVersion)
- file(READ ${CMAKE_SOURCE_DIR}/version-info aFunDescription)
- project(aFun
- VERSION ${aFunVersion}
- DESCRIPTION ${aFunDescription}
- LANGUAGES C CXX)
- # CMake系统的相关设定
- set(CMAKE_C_STANDARD 11)
- set(C_EXTENSIONS OFF) # 启动编译器拓展
- set(C_STANDARD_REQUIRED OFF)
- set(CMAKE_CXX_STANDARD 20)
- set(CXX_EXTENSIONS OFF) # 启动编译器拓展
- set(CXX_STANDARD_REQUIRED OFF)
- set(BUILD_SHARED_LIBS OFF) # 默认编译静态库 (该设定不可被修改)
- list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
- set(CMAKE_BUILD_TYPE Debug CACHE STRING "Build type.")
- if(CMAKE_BUILD_TYPE EQUAL Debug AND CMAKE_BUILD_TYPE EQUAL Release)
- message(WARNING "Unknown build type.")
- endif()
- # 系统检查
- include(CheckCCompilerFlag)
- check_c_compiler_flag("-fPIC" fpic_enable) # 检查是否有fPIC选项
- if (fpic_enable)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
- endif()
- unset(fpic_enable)
- include(CheckCXXCompilerFlag)
- check_cxx_compiler_flag("-fPIC" fpic_enable) # 检查是否有fPIC选项
- if (fpic_enable)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
- endif()
- unset(fpic_enable)
- if (MSVC)
- if(CMAKE_BUILD_TYPE EQUAL Debug)
- set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} /Debug /W4 /wd4251 /wd4275")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Debug /W4 /wd4251 /wd4275")
- else()
- set(CMAKE_C_FLAGS "/DWIN32 /D_WINDOWS /W4 /wd4251 /wd4275")
- set(CMAKE_CXX_FLAGS "/DWIN32 /D_WINDOWS /GR /EHsc /W4 /wd4251 /wd4275")
- endif()
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")
- else()
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fexec-charset=UTF-8 -Wall -Wextra -pedantic")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexec-charset=UTF-8 -Wall -Wextra -pedantic")
- endif()
- # 相关参数
- set(PRINT_DIR_INFO ON CACHE BOOL "Print install and build dirs info.")
- set(_print_dir ${PRINT_DIR_INFO})
- include(tool)
- include(directory)
- if (_print_dir)
- set(PRINT_DIR_INFO OFF CACHE BOOL "Print install and build dirs info." FORCE)
- wi_set_install_dir(NAMES aFunlang) # 设置安装路径
- else()
- wi_set_install_dir_quiet(NAMES aFunlang) # 设置安装路径
- endif()
- include(filename)
- # CMake对象属性的初始化值的相关设定
- set(CMAKE_INSTALL_RPATH
- "${CMAKE_INSTALL_PREFIX}/${INSTALL_LIBDIR}"
- "${CMAKE_INSTALL_PREFIX}/${deps_install_dir}/${INSTALL_LIBDIR}") # INSTALL_RPATH 初始化值
- set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
- set(CMAKE_MACOSX_RPATH TRUE)
- include_directories(${CMAKE_SOURCE_DIR}/include ${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR}) # 添加默认的include路径
- add_subdirectory(deps) # 安装依赖
- include(deps) # 查找依赖
- if (NOT DEPS_FOUND)
- return()
- endif()
- #include(${CMAKE_CURRENT_LIST_DIR}/lang/hgt.cmake) # 安装lang库
- add_subdirectory(src)
- include(export_head)
- #install(EXPORT aFunlang
- # NAMESPACE "aFunlang::"
- # DESTINATION ${INSTALL_CMAKEDIR}
- # COMPONENT dev)
- #
- #include(CMakePackageConfigHelpers)
- #write_basic_package_version_file(${CMAKE_BINARY_DIR}/cmake-tmp/aFunlangConfigVersion.cmake
- # VERSION ${aFunVersion}
- # COMPATIBILITY SameMinorVersion)
- #
- ## 生成Config.cmake文件
- #set(INSTALL_DIR ${CMAKE_INSTALL_PREFIX})
- #set(BINDIR ${INSTALL_BINDIR})
- #set(LIBDIR ${INSTALL_LIBDIR})
- #set(CMAKEDIR ${INSTALL_CMAKEDIR})
- #set(INCLUDEDIR ${INSTALL_INCLUDEDIR})
- #
- #if (MSVC)
- # set(pthread_INSTALL_DIR ${deps_install_dir})
- # set(pthread_CMAKEDIR pthread_cmake)
- # set(path_var pthread_INSTALL_DIR pthread_CMAKEDIR)
- #else()
- # set(path_var)
- #endif()
- #if (WIN32 AND NOT CYGWIN) # cygwin 不需要编译 dl
- # foreach(tgt dlfcn pcre2 fflags)
- # set(${tgt}_INSTALL_DIR ${deps_install_dir})
- # set(${tgt}_CMAKEDIR ${deps_install_dir}/${${tgt}_cmake})
- # list(APPEND path_var ${tgt}_INSTALL_DIR ${tgt}_CMAKEDIR)
- # endforeach()
- #else()
- # foreach(tgt pcre2 fflags)
- # set(${tgt}_INSTALL_DIR ${deps_install_dir})
- # set(${tgt}_CMAKEDIR ${deps_install_dir}/${${tgt}_cmake})
- # list(APPEND path_var ${tgt}_INSTALL_DIR ${tgt}_CMAKEDIR)
- # endforeach()
- #
- # set(dlfcn_INSTALL_DIR \"\") # 空字符串
- # set(dlfcn_CMAKEDIR \"\") # 空字符串
- #endif()
- #
- #configure_package_config_file(${PROJECT_SOURCE_DIR}/cmake/aFunlangConfig.cmake.in
- # ${CMAKE_BINARY_DIR}/cmake-tmp/aFunlangConfig.cmake
- # INSTALL_DESTINATION ${INSTALL_CMAKEDIR}
- # PATH_VARS INSTALL_DIR BINDIR LIBDIR CMAKEDIR INCLUDEDIR ${path_var}
- # INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) # 指定安装目录 (用于生成相对路径)
- #unset(INSTALL_DIR)
- #unset(BINDIR)
- #unset(LIBDIR)
- #unset(CMAKEDIR)
- #unset(INCLUDEDIR)
- #foreach(tgt dlfcn pcre2 fflags)
- # unset(${tgt}_INSTALL_DIR)
- # unset(${tgt}_CMAKEDIR)
- #endforeach()
- #unset(path_var)
- #
- #install(FILES
- # ${CMAKE_BINARY_DIR}/cmake-tmp/aFunlangConfig.cmake
- # ${CMAKE_BINARY_DIR}/cmake-tmp/aFunlangConfigVersion.cmake
- # DESTINATION ${INSTALL_CMAKEDIR})
- #
- set(BUILD_TEST FALSE CACHE BOOL "Enable run test program")
- set(_build_test ${BUILD_TEST})
- if (_build_test)
- enable_testing()
- endif()
- add_subdirectory(test) # test的相关内容仍会被构建
- #
- include(info)
|