Files
flowerstonezl e1006fa09c first init
2026-01-29 17:04:05 +08:00

110 lines
2.7 KiB
CMake
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 1. 指定CMake最低版本要求
cmake_minimum_required(VERSION 3.10)
# 2. 设置项目信息
project(
704BinarySearch # 项目名称
VERSION 1.0.0 # 项目版本
DESCRIPTION "Simple C++ Project"
LANGUAGES CXX # 支持的语言
)
# 3. 设置C++标准和编译特性
set(CMAKE_CXX_STANDARD 17) # 使用C++17标准
set(CMAKE_CXX_STANDARD_REQUIRED ON) # 必须支持指定标准
set(CMAKE_CXX_EXTENSIONS OFF) # 禁用编译器特有扩展
# 4. 配置构建类型和编译选项
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release) # 默认构建类型为Release
endif()
# 公共编译选项
# 修改后 - 分开添加选项
add_compile_options(
"$<$<CONFIG:Release>:-O3>" # Release模式优化
"$<$<CONFIG:Debug>:-g3>"
"$<$<CONFIG:Debug>:-O0>"
)
# 平台特定选项
if(MSVC)
add_compile_options(/W4 /WX) # MSVC: 警告等级4视警告为错误
else()
add_compile_options(-Wall -Wextra -Wpedantic -Werror) # GCC/Clang: 严格警告
endif()
# 5. 查找依赖包
# find_package(Boost 1.70 COMPONENTS filesystem system)
# 6. 包含目录设置
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/include # 项目头文件目录
)
# 7. 源文件收集
file(GLOB_RECURSE SOURCES "src/*.cpp") # 递归收集源文件
file(GLOB_RECURSE HEADERS "include/*.h") # 头文件
# 8. 创建目标
# 可执行文件目标
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
# 9. 链接依赖库
if(Boost_FOUND)
target_link_libraries(${PROJECT_NAME}
PRIVATE
Boost::filesystem
Boost::system
)
endif()
# 10. 安装规则
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
install(DIRECTORY include/ DESTINATION include)
# 11. 测试支持
enable_testing()
# 12. 附加功能
# 12.1 Windows资源文件
if(WIN32 AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/app.rc)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/app.rc)
endif()
# # 12.2 预编译头文件
# target_precompile_headers(${PROJECT_NAME} PRIVATE
# <vector>
# <string>
# <memory>
# ${PROJECT_SOURCE_DIR}/include/pch.h
# )
# 13. 生成配置文件
# 13.1 导出头文件路径
target_include_directories(${PROJECT_NAME}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
# 13.2 生成版本信息
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/Version.hpp.in
${CMAKE_CURRENT_BINARY_DIR}/Version.hpp
)
# 14. 自定义目标
add_custom_target(run
COMMAND ${PROJECT_NAME}
DEPENDS ${PROJECT_NAME}
COMMENT "Running ${PROJECT_NAME}..."
)
# 15. 包管理器集成
include(CPack)