cmake_minimum_required(VERSION 3.10)
project(SmartCitySecurity VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
├── CMakeLists.txt # 根配置
├── src/ # 主程序源代码
├── include/ # 公共头文件
├── libs/ # 第三方库
├── tests/ # 测试代码
└── tools/ # 开发工具
# 安全编译标志
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
add_compile_options(
-Wall -Wextra -Wpedantic
-Wformat-security
-Wstack-protector
-fstack-protector-strong
-D_FORTIFY_SOURCE=2
-fPIE
)
add_link_options(-pie -Wl,-z,now -Wl,-z,relro)
endif()
# 集成Clang静态分析器
option(ENABLE_CLANG_TIDY "Enable clang-tidy analysis" OFF)
if(ENABLE_CLANG_TIDY)
find_program(CLANG_TIDY_EXE NAMES "clang-tidy")
if(CLANG_TIDY_EXE)
set(CMAKE_CXX_CLANG_TIDY ${CLANG_TIDY_EXE}
-checks=*,
-clang-analyzer-*,
-cert-*,
-misc-*,
-modernize-*,
-performance-*,
-portability-*,
-readability-*,
-security-*)
endif()
endif()
# OpenCV集成
find_package(OpenCV REQUIRED COMPONENTS core imgproc videoio highgui dnn)
include_directories(${OpenCV_INCLUDE_DIRS})
# 添加视频分析模块
add_library(video_analyzer src/video_analysis.cpp)
target_link_libraries(video_analyzer ${OpenCV_LIBS})
# MQTT集成
find_package(PahoMqttCpp REQUIRED)
# 添加IoT通信模块
add_library(iot_communication
src/iot/mqtt_handler.cpp
src/iot/device_manager.cpp)
target_link_libraries(iot_communication PahoMqttCpp::PahoMqttCpp)
# PostgreSQL集成
find_package(PostgreSQL REQUIRED)
# 添加数据存储模块
add_library(data_storage src/database/postgres_handler.cpp)
target_link_libraries(data_storage PostgreSQL::PostgreSQL)
option(ENABLE_SECURE_MODE "Enable all security features" ON)
if(ENABLE_SECURE_MODE)
add_definitions(-DUSE_SECURE_MODE)
# 添加额外安全模块
add_subdirectory(security)
endif()
# Address Sanitizer配置
option(ENABLE_ASAN "Enable Address Sanitizer" OFF)
if(ENABLE_ASAN)
add_compile_options(-fsanitize=address -fno-omit-frame-pointer)
add_link_options(-fsanitize=address)
endif()
# 安装配置
install(TARGETS smart_city_security
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
# 配置文件安装
install(DIRECTORY config/ DESTINATION etc/smartcitysecurity)
# 系统服务安装
if(UNIX AND NOT APPLE)
install(FILES scripts/smartcity.service
DESTINATION /lib/systemd/system
)
endif()
# 检测CPU架构
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE)
if(COMPILER_SUPPORTS_MARCH_NATIVE)
add_compile_options(-march=native)
endif()
find_package(Threads REQUIRED)
# 添加并行处理模块
add_library(parallel_processing src/parallel/thread_pool.cpp)
target_link_libraries(parallel_processing Threads::Threads)
# Google Test集成
include(FetchContent)
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/refs/tags/v1.11.0.tar.gz
)
FetchContent_MakeAvailable(googletest)
# 添加测试
add_subdirectory(tests)
cmake_minimum_required(VERSION 3.14)
project(SmartCitySecurity VERSION 1.0.0 LANGUAGES CXX)
# 基本配置
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# 安全编译选项
include(security_flags.cmake)
# 项目组件
add_subdirectory(src)
add_subdirectory(libs)
add_subdirectory(tests)
# 主应用程序
add_executable(smart_city_security
src/main.cpp
src/core/application.cpp)
target_link_libraries(smart_city_security
video_analyzer
iot_communication
data_storage
parallel_processing
${OpenCV_LIBS}
PahoMqttCpp::PahoMqttCpp
PostgreSQL::PostgreSQL
Threads::Threads)
# 安装配置
include(install_config.cmake)
通过以上CMake配置技巧,您可以构建一个安全、高效且可维护的Linux智能城市安全应用程序。根据项目具体需求,可以进一步调整和扩展这些配置。