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)
|