Ai
139 Star 595 Fork 337

夏楚/ZLToolKit

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
CMakeLists.txt 5.17 KB
一键复制 编辑 原始数据 按行查看 历史
夏楚 提交于 2025-11-27 21:33 +08:00 . 简化wepoll代码
cmake_minimum_required(VERSION 3.1.3...3.26)
project(ZLToolKit)
#使能c++11
set(CMAKE_CXX_STANDARD 11)
# -fPIC
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# 打印详情
set(CMAKE_VERBOSE_MAKEFILE ON)
#加载自定义模块
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
option(ENABLE_OPENSSL "enable openssl" ON)
option(ENABLE_MYSQL "enable mysql" ON)
option(ENABLE_WEPOLL "Enable wepoll" ON)
option(ASAN_USE_DELETE "use delele[] or free when asan enabled" OFF)
option(BUILD_SHARED_LIBS "Build all libraries shared" ON)
include(CheckStructHasMember)
include(CheckSymbolExists)
list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
check_struct_has_member("struct mmsghdr" msg_hdr sys/socket.h HAVE_MMSG_HDR)
check_symbol_exists(sendmmsg sys/socket.h HAVE_SENDMMSG_API)
check_symbol_exists(recvmmsg sys/socket.h HAVE_RECVMMSG_API)
# 方便修改全局变量
function(update_cached name value)
set("${name}" "${value}" CACHE INTERNAL "*** Internal ***" FORCE)
endfunction()
function(update_cached_list name)
set(_tmp_list "${${name}}")
list(APPEND _tmp_list "${ARGN}")
list(REMOVE_DUPLICATES _tmp_list)
update_cached(${name} "${_tmp_list}")
endfunction()
update_cached(TK_INC_PATHS "")
update_cached(TK_LINK_LIBRARIES "")
update_cached(TK_COMPILE_DEFINITIONS "")
update_cached(TK_COMPILE_OPTIONS "")
if (HAVE_MMSG_HDR)
update_cached_list(TK_COMPILE_DEFINITIONS HAVE_MMSG_HDR)
endif ()
if (HAVE_SENDMMSG_API)
update_cached_list(TK_COMPILE_DEFINITIONS HAVE_SENDMMSG_API)
endif ()
if (HAVE_RECVMMSG_API)
update_cached_list(TK_COMPILE_DEFINITIONS HAVE_RECVMMSG_API)
endif ()
# check the socket buffer size set by the upper cmake project, if it is set, use the setting of the upper cmake project, otherwise set it to 256K
# if the socket buffer size is set to 0, it means that the socket buffer size is not set, and the kernel default value is used(just for linux)
if (DEFINED SOCKET_DEFAULT_BUF_SIZE)
if (SOCKET_DEFAULT_BUF_SIZE EQUAL 0)
message(STATUS "Socket default buffer size is not set, use the kernel default value")
else ()
message(STATUS "Socket default buffer size is set to ${SOCKET_DEFAULT_BUF_SIZE}")
endif ()
update_cached_list(TK_COMPILE_DEFINITIONS SOCKET_DEFAULT_BUF_SIZE=${SOCKET_DEFAULT_BUF_SIZE})
endif ()
# 收集源码
file(GLOB SRC_LIST
${CMAKE_CURRENT_SOURCE_DIR}/src/*/*.c
${CMAKE_CURRENT_SOURCE_DIR}/src/*/*.mm
${CMAKE_CURRENT_SOURCE_DIR}/src/*/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/*/*/*.cpp)
if (WIN32)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
if (MSVC)
update_cached_list(TK_COMPILE_OPTIONS "/utf-8")
endif ()
update_cached_list(TK_LINK_LIBRARIES WS2_32 Iphlpapi shlwapi)
#防止Windows.h包含Winsock.h
update_cached_list(TK_COMPILE_DEFINITIONS WIN32_LEAN_AND_MEAN MP4V2_NO_STDINT_DEFS _CRT_SECURE_NO_WARNINGS _WINSOCK_DEPRECATED_NO_WARNINGS)
else ()
# 非Windows平台自带getopt api
list(FILTER SRC_LIST EXCLUDE REGEX "getopt.c$")
update_cached_list(TK_COMPILE_OPTIONS "-Wno-comment" "-Wno-deprecated-declarations" "-Wno-predefined-identifier-outside-function")
endif ()
if (NOT WIN32 OR NOT ENABLE_WEPOLL)
# 移除wepoll
list(FILTER SRC_LIST EXCLUDE REGEX "wepoll.c$")
else ()
update_cached_list(TK_COMPILE_DEFINITIONS HAS_EPOLL)
update_cached_list(TK_INC_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/src/win32/)
endif ()
#非苹果平台移除.mm类型的文件
if (NOT APPLE)
list(FILTER SRC_LIST EXCLUDE REGEX "Socket_ios.mm$")
endif ()
#查找openssl是否安装
if (ENABLE_OPENSSL)
find_package(OpenSSL)
if (OPENSSL_FOUND)
update_cached_list(TK_INC_PATHS ${OPENSSL_INCLUDE_DIR})
update_cached_list(TK_LINK_LIBRARIES ${OPENSSL_LIBRARIES})
update_cached_list(TK_COMPILE_DEFINITIONS ENABLE_OPENSSL)
endif ()
endif ()
#查找mysql是否安装
if (ENABLE_MYSQL)
find_package(MYSQL)
if (MYSQL_FOUND)
update_cached_list(TK_INC_PATHS ${MYSQL_INCLUDE_DIR})
update_cached_list(TK_INC_PATHS ${MYSQL_INCLUDE_DIR}/mysql)
update_cached_list(TK_LINK_LIBRARIES ${MYSQL_LIBRARIES})
update_cached_list(TK_COMPILE_DEFINITIONS ENABLE_MYSQL)
endif ()
endif ()
#是否使用delete[]替代free,用于解决开启asan后在MacOS上的卡死问题
if (ASAN_USE_DELETE)
update_cached_list(TK_COMPILE_DEFINITIONS ASAN_USE_DELETE)
endif ()
# 库依赖
add_library(${PROJECT_NAME}_deps INTERFACE)
target_link_libraries(${PROJECT_NAME}_deps INTERFACE ${TK_LINK_LIBRARIES})
#编译库
add_library(${PROJECT_NAME} ${SRC_LIST})
#引用头文件路径
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src ${TK_INC_PATHS})
target_link_libraries(${PROJECT_NAME} PUBLIC ${PROJECT_NAME}_deps)
target_compile_definitions(${PROJECT_NAME} PUBLIC ${TK_COMPILE_DEFINITIONS})
target_compile_options(${PROJECT_NAME} PUBLIC ${TK_COMPILE_OPTIONS})
set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib
ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
#本工程为root工程,则添加测试程序
add_subdirectory(tests)
endif ()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/xia-chu/ZLToolKit.git
git@gitee.com:xia-chu/ZLToolKit.git
xia-chu
ZLToolKit
ZLToolKit
master

搜索帮助