cmake_minimum_required(VERSION 3.10)
project(SmartLogistics VERSION 1.0.0 LANGUAGES CXX)
# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# 设置输出目录
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
# 查找MySQL开发库
find_package(MySQL REQUIRED)
# 或者使用PostgreSQL
find_package(PostgreSQL REQUIRED)
# 添加数据库相关源文件
add_executable(logistics_db
src/database/db_handler.cpp
src/database/query_builder.cpp
)
target_link_libraries(logistics_db PRIVATE MySQL::MySQL)
# 使用Boost.Asio进行网络通信
find_package(Boost 1.70 REQUIRED COMPONENTS system)
add_executable(logistics_network
src/network/client.cpp
src/network/server.cpp
)
target_link_libraries(logistics_network PRIVATE Boost::system)
# 使用CGAL进行地理空间计算
find_package(CGAL REQUIRED COMPONENTS Core)
add_library(path_planning
src/algorithms/dijkstra.cpp
src/algorithms/astar.cpp
)
target_link_libraries(path_planning PRIVATE CGAL::CGAL)
# 使用Paho MQTT进行物联网通信
find_package(PahoMqttC REQUIRED)
find_package(PahoMqttCpp REQUIRED)
add_executable(device_integration
src/iot/device_manager.cpp
src/iot/mqtt_handler.cpp
)
target_link_libraries(device_integration PRIVATE PahoMqttCpp::PahoMqttCpp)
# 主CMakeLists.txt
add_subdirectory(core)
add_subdirectory(network)
add_subdirectory(ui)
add_subdirectory(tests)
# 每个子目录有自己的CMakeLists.txt
option(WITH_GPU_ACCEL "Enable GPU acceleration" ON)
option(WITH_DEBUG "Build with debug symbols" OFF)
if(WITH_GPU_ACCEL)
find_package(CUDA REQUIRED)
# 添加GPU相关代码
endif()
if(WITH_DEBUG)
add_compile_options(-g -O0)
endif()
# 使用FetchContent管理依赖
include(FetchContent)
FetchContent_Declare(
json
GIT_REPOSITORY https://github.com/nlohmann/json.git
GIT_TAG v3.9.1
)
FetchContent_MakeAvailable(json)
# 使用外部项目
include(ExternalProject)
ExternalProject_Add(
spdlog
GIT_REPOSITORY "https://github.com/gabime/spdlog.git"
CMAKE_ARGS -DSPDLOG_BUILD_EXAMPLE=OFF
)
# 安装可执行文件
install(TARGETS logistics_app
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
# 安装配置文件
install(DIRECTORY config/ DESTINATION etc/logistics)
# 生成配置文件
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/config/config.h.in"
"${CMAKE_CURRENT_BINARY_DIR}/config/config.h"
)
# 启用链接时优化
include(CheckIPOSupported)
check_ipo_supported(RESULT result OUTPUT output)
if(result)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
endif()
# 并行构建
set(CMAKE_JOB_POOLS compile=8 link=4)
set(CMAKE_JOB_POOL_COMPILE compile)
set(CMAKE_JOB_POOL_LINK link)
# 启用测试
enable_testing()
# 添加Google Test
include(CTest)
find_package(GTest REQUIRED)
add_executable(logistics_tests
tests/test_path_planning.cpp
tests/test_db_integration.cpp
)
target_link_libraries(logistics_tests PRIVATE GTest::GTest GTest::Main)
add_test(NAME logistics_tests COMMAND logistics_tests)
# 平台特定配置
if(UNIX AND NOT APPLE)
# Linux特定设置
add_compile_definitions(LINUX)
find_package(Threads REQUIRED)
target_link_libraries(your_target PRIVATE Threads::Threads)
elseif(WIN32)
# Windows特定设置
add_compile_definitions(WINDOWS)
endif()
保持CMake文件整洁:将大型项目分解为模块,每个模块有自己的CMakeLists.txt
版本控制:在CMake中明确指定项目版本和依赖版本
文档生成:集成Doxygen或其他文档工具
find_package(Doxygen)
if(DOXYGEN_FOUND)
add_custom_target(docs
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
endif()
静态分析:集成clang-tidy或cppcheck
find_program(CLANG_TIDY clang-tidy)
if(CLANG_TIDY)
set(CMAKE_CXX_CLANG_TIDY ${CLANG_TIDY})
endif()
持续集成:确保CMake配置支持CI/CD流程,包括测试、打包和部署
通过以上配置技巧,您可以构建一个高效、模块化且易于维护的智能物流应用程序,充分利用Linux平台的优势。