CMakeLists.txt 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. cmake_minimum_required(VERSION 3.16)
  2. # 获取版本信息
  3. file(READ ${CMAKE_SOURCE_DIR}/version aFunVersion)
  4. file(READ ${CMAKE_SOURCE_DIR}/version-info aFunDescription)
  5. project(aFun
  6. VERSION ${aFunVersion}
  7. DESCRIPTION ${aFunDescription}
  8. LANGUAGES C CXX)
  9. # CMake系统的相关设定
  10. set(CMAKE_C_STANDARD 11)
  11. set(C_EXTENSIONS OFF) # 启动编译器拓展
  12. set(C_STANDARD_REQUIRED OFF)
  13. set(CMAKE_CXX_STANDARD 20)
  14. set(CXX_EXTENSIONS OFF) # 启动编译器拓展
  15. set(CXX_STANDARD_REQUIRED OFF)
  16. set(BUILD_SHARED_LIBS OFF) # 默认编译静态库 (该设定不可被修改)
  17. list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
  18. set(CMAKE_BUILD_TYPE Debug CACHE STRING "Build type.")
  19. if(CMAKE_BUILD_TYPE EQUAL Debug AND CMAKE_BUILD_TYPE EQUAL Release)
  20. message(WARNING "Unknown build type.")
  21. endif()
  22. # 系统检查
  23. include(CheckCCompilerFlag)
  24. check_c_compiler_flag("-fPIC" fpic_enable) # 检查是否有fPIC选项
  25. if (fpic_enable)
  26. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
  27. endif()
  28. unset(fpic_enable)
  29. include(CheckCXXCompilerFlag)
  30. check_cxx_compiler_flag("-fPIC" fpic_enable) # 检查是否有fPIC选项
  31. if (fpic_enable)
  32. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
  33. endif()
  34. unset(fpic_enable)
  35. if (MSVC)
  36. if(CMAKE_BUILD_TYPE EQUAL Debug)
  37. set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} /Debug /W4 /wd4251 /wd4275")
  38. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Debug /W4 /wd4251 /wd4275")
  39. else()
  40. set(CMAKE_C_FLAGS "/DWIN32 /D_WINDOWS /W4 /wd4251 /wd4275")
  41. set(CMAKE_CXX_FLAGS "/DWIN32 /D_WINDOWS /GR /EHsc /W4 /wd4251 /wd4275")
  42. endif()
  43. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8")
  44. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")
  45. else()
  46. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fexec-charset=UTF-8 -Wall -Wextra -pedantic")
  47. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexec-charset=UTF-8 -Wall -Wextra -pedantic")
  48. endif()
  49. # 相关参数
  50. set(PRINT_DIR_INFO ON CACHE BOOL "Print install and build dirs info.")
  51. set(_print_dir ${PRINT_DIR_INFO})
  52. include(tool)
  53. include(directory)
  54. if (_print_dir)
  55. set(PRINT_DIR_INFO OFF CACHE BOOL "Print install and build dirs info." FORCE)
  56. wi_set_install_dir(NAMES aFunlang) # 设置安装路径
  57. else()
  58. wi_set_install_dir_quiet(NAMES aFunlang) # 设置安装路径
  59. endif()
  60. include(filename)
  61. # CMake对象属性的初始化值的相关设定
  62. set(CMAKE_INSTALL_RPATH
  63. "${CMAKE_INSTALL_PREFIX}/${INSTALL_LIBDIR}"
  64. "${CMAKE_INSTALL_PREFIX}/${deps_install_dir}/${INSTALL_LIBDIR}") # INSTALL_RPATH 初始化值
  65. set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
  66. set(CMAKE_MACOSX_RPATH TRUE)
  67. include_directories(${CMAKE_SOURCE_DIR}/include ${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR}) # 添加默认的include路径
  68. add_subdirectory(deps) # 安装依赖
  69. include(deps) # 查找依赖
  70. if (NOT DEPS_FOUND)
  71. return()
  72. endif()
  73. #include(${CMAKE_CURRENT_LIST_DIR}/lang/hgt.cmake) # 安装lang库
  74. add_subdirectory(src)
  75. include(export_head)
  76. #install(EXPORT aFunlang
  77. # NAMESPACE "aFunlang::"
  78. # DESTINATION ${INSTALL_CMAKEDIR}
  79. # COMPONENT dev)
  80. #
  81. #include(CMakePackageConfigHelpers)
  82. #write_basic_package_version_file(${CMAKE_BINARY_DIR}/cmake-tmp/aFunlangConfigVersion.cmake
  83. # VERSION ${aFunVersion}
  84. # COMPATIBILITY SameMinorVersion)
  85. #
  86. ## 生成Config.cmake文件
  87. #set(INSTALL_DIR ${CMAKE_INSTALL_PREFIX})
  88. #set(BINDIR ${INSTALL_BINDIR})
  89. #set(LIBDIR ${INSTALL_LIBDIR})
  90. #set(CMAKEDIR ${INSTALL_CMAKEDIR})
  91. #set(INCLUDEDIR ${INSTALL_INCLUDEDIR})
  92. #
  93. #if (MSVC)
  94. # set(pthread_INSTALL_DIR ${deps_install_dir})
  95. # set(pthread_CMAKEDIR pthread_cmake)
  96. # set(path_var pthread_INSTALL_DIR pthread_CMAKEDIR)
  97. #else()
  98. # set(path_var)
  99. #endif()
  100. #if (WIN32 AND NOT CYGWIN) # cygwin 不需要编译 dl
  101. # foreach(tgt dlfcn pcre2 fflags)
  102. # set(${tgt}_INSTALL_DIR ${deps_install_dir})
  103. # set(${tgt}_CMAKEDIR ${deps_install_dir}/${${tgt}_cmake})
  104. # list(APPEND path_var ${tgt}_INSTALL_DIR ${tgt}_CMAKEDIR)
  105. # endforeach()
  106. #else()
  107. # foreach(tgt pcre2 fflags)
  108. # set(${tgt}_INSTALL_DIR ${deps_install_dir})
  109. # set(${tgt}_CMAKEDIR ${deps_install_dir}/${${tgt}_cmake})
  110. # list(APPEND path_var ${tgt}_INSTALL_DIR ${tgt}_CMAKEDIR)
  111. # endforeach()
  112. #
  113. # set(dlfcn_INSTALL_DIR \"\") # 空字符串
  114. # set(dlfcn_CMAKEDIR \"\") # 空字符串
  115. #endif()
  116. #
  117. #configure_package_config_file(${PROJECT_SOURCE_DIR}/cmake/aFunlangConfig.cmake.in
  118. # ${CMAKE_BINARY_DIR}/cmake-tmp/aFunlangConfig.cmake
  119. # INSTALL_DESTINATION ${INSTALL_CMAKEDIR}
  120. # PATH_VARS INSTALL_DIR BINDIR LIBDIR CMAKEDIR INCLUDEDIR ${path_var}
  121. # INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) # 指定安装目录 (用于生成相对路径)
  122. #unset(INSTALL_DIR)
  123. #unset(BINDIR)
  124. #unset(LIBDIR)
  125. #unset(CMAKEDIR)
  126. #unset(INCLUDEDIR)
  127. #foreach(tgt dlfcn pcre2 fflags)
  128. # unset(${tgt}_INSTALL_DIR)
  129. # unset(${tgt}_CMAKEDIR)
  130. #endforeach()
  131. #unset(path_var)
  132. #
  133. #install(FILES
  134. # ${CMAKE_BINARY_DIR}/cmake-tmp/aFunlangConfig.cmake
  135. # ${CMAKE_BINARY_DIR}/cmake-tmp/aFunlangConfigVersion.cmake
  136. # DESTINATION ${INSTALL_CMAKEDIR})
  137. #
  138. set(BUILD_TEST FALSE CACHE BOOL "Enable run test program")
  139. set(_build_test ${BUILD_TEST})
  140. if (_build_test)
  141. enable_testing()
  142. endif()
  143. add_subdirectory(test) # test的相关内容仍会被构建
  144. #
  145. include(info)