123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- cmake_minimum_required(VERSION 3.16)
- project(aFun LANGUAGES C)
- # CMake系统的相关设定
- set(CMAKE_C_STANDARD 11)
- set(C_EXTENSIONS ON) # 启动编译器拓展
- set(C_STANDARD_REQUIRED OFF)
- set(BUILD_SHARED_LIBS OFF) # 默认编译静态库 (该设定不可被修改)
- list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
- set(VISIBILITY_INLINES_HIDDEN TRUE) # 默认内联函数不可见
- set(CMAKE_C_VISIBILITY_PRESET "hidden") # 默认所有符号不可见
- # 系统检查
- include(CheckCCompilerFlag)
- check_c_compiler_flag("-fPIC" fpic_work) # 检查是否有fPIC选项
- if (fpic_work)
- list(APPEND CMAKE_C_FLAGS "-fPIC")
- endif()
- if (MSVC)
- set(CMAKE_GNUtoMS TRUE)
- endif()
- # 相关参数
- set(PRINT_DIR_INFO ON CACHE BOOL "Print install and build dirs info.")
- set(_print_dir ${PRINT_DIR_INFO})
- include(CFEP) # 搜索CFEP.cmake
- 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(info)
- # 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路径
- include(${CMAKE_CURRENT_LIST_DIR}/deps/deps.cmake) # 安装依赖
- add_subdirectory(src)
- include(aFunHeader)
- 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 "0.0.0"
- 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})
- set(path_var)
- if (WIN32 AND NOT CYGWIN)
- 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的相关内容仍会被构建
|