110 lines
2.7 KiB
CMake
110 lines
2.7 KiB
CMake
# 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) |