diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2025-06-12 21:41:41 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2025-06-13 20:22:51 +0800 |
| commit | 6f7b994684032060f0a2d7af82f4f3572293b8d6 (patch) | |
| tree | 793d328cbcd6761365267550b55db45aee9b21fc /CMakeLists.txt | |
| parent | 6a51ab4525c59e9fe2bdbd92493019b0a98c6b94 (diff) | |
internal!: organized internal structure, using cmake now
Diffstat (limited to 'CMakeLists.txt')
| -rw-r--r-- | CMakeLists.txt | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..6e3dc35 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,54 @@ +cmake_minimum_required(VERSION 4.0.2) + +project( + chat-server + VERSION 1.0.0 + DESCRIPTION "chat server via socket" + LANGUAGES CXX) + +include(GNUInstallDirs) + +set(CMAKE_CXX_STANDARD 26) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG) + message(STATUS "Configuring chat-server in Debug with CMake") + add_compile_definitions(DEBUG) +else() + message(STATUS "Configuring chat-server in Release with CMake") +endif() + +message(STATUS "Checking dependencies...") + +find_package(PkgConfig REQUIRED) +pkg_check_modules(FTXUI REQUIRED IMPORTED_TARGET ftxui) + +file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS "src/*.cpp") + +add_executable(${PROJECT_NAME} ${SOURCES}) + +target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_26) + +add_compile_options(-Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion + -Wno-unused-parameter) + +if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG) + message(STATUS "Setting debug flags") + add_compile_options(-g3 -O0 -fno-omit-frame-pointer) + add_compile_options(-fsanitize=address,undefined) + target_link_options(${PROJECT_NAME} PRIVATE -fsanitize=address,undefined) +else() + add_compile_options(-O3 -flto -DNDEBUG) + target_link_options(${PROJECT_NAME} PRIVATE -flto -Wl,--gc-sections) +endif() + +target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::FTXUI) +target_include_directories(${PROJECT_NAME} PRIVATE src) + +install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) |
