cmake_minimum_required(VERSION 3.29) project(flags-cpp) set(CMAKE_C_COMPILER gcc) set(CMAKE_CXX_COMPILER g++) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS true) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall -Wextra -Werror -Wno-unused-parameter -Wno-unused-variable -Wno-unused-private-field") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wextra -Werror -Wno-unused-parameter -Wno-unused-variable -Wno-unused-private-field") if(DEBUG) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -DDEBUG") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -DDEBUG") endif() file(GLOB_RECURSE SOURCES "${CMAKE_SOURCE_DIR}/src/flags-cpp/*.cpp") file(GLOB_RECURSE HEADERS "${CMAKE_SOURCE_DIR}/inc/flags-cpp/*.h") include_directories("${CMAKE_SOURCE_DIR}/inc") add_library(flags-cpp OBJECT ${SOURCES}) set_target_properties(flags-cpp PROPERTIES POSITION_INDEPENDENT_CODE 1) add_library(flags-cpp-static STATIC $) set_target_properties(flags-cpp-static PROPERTIES OUTPUT_NAME flags-cpp) add_library(flags-cpp-shared SHARED $) target_link_libraries(flags-cpp-shared -static-libgcc -static-libstdc++) set_target_properties(flags-cpp-shared PROPERTIES OUTPUT_NAME flags-cpp) add_executable(example "${CMAKE_SOURCE_DIR}/src/main.cpp") target_link_libraries(example flags-cpp-shared) install(TARGETS flags-cpp-static flags-cpp-shared RUNTIME COMPONENT Runtime LIBRARY COMPONENT Runtime ARCHIVE COMPONENT Development ) install(FILES ${HEADERS} DESTINATION include/flags-cpp COMPONENT Development) install(TARGETS flags-cpp-static flags-cpp-shared EXPORT flags-cpp-targets DESTINATION lib ) install(EXPORT flags-cpp-targets FILE FlagsCppConfig.cmake DESTINATION lib/cmake/FlagsCpp )