一个通用的CMake项目模板

本文介绍了一个通用的CMake项目模板,涵盖C++项目的构建、库的创建、外部依赖查找、安装规则和版本控制功能,以帮助开发者快速配置基本项目结构。
摘要由CSDN通过智能技术生成

下面是一个通用的CMake项目模板,适用于大多数C++项目,包含了可执行文件、库的创建、外部依赖的查找、安装规则及版本控制等功能:

# 指定CMake最低版本要求
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)

# 设置项目名称和语言
project(MyGenericProject LANGUAGES CXX)

# 设置C++标准,这里假设使用C++17
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 定义全局编译选项(可选)
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)

# 配置源代码目录结构(可替换src和lib为实际目录)
add_subdirectory(src)

# 示例:添加一个库
# 在实际项目中替换"MyLibrary"和"src/library/*.cpp"
add_library(MyLibrary STATIC
    src/library/file1.cpp
    src/library/file2.cpp
)

# 库的公共头文件目录(便于使用者包含)
target_include_directories(MyLibrary
    PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    # 若有安装后的头文件位置,加入INSTALL_INTERFACE部分
    # INTERFACE
    # $<INSTALL_INTERFACE:include/MyLibrary>
)

# 示例:添加一个可执行文件
# 替换"MyExecutable"和"src/executable/*.cpp"
add_executable(MyExecutable
    src/executable/main.cpp
    src/executable/other.cpp
)

# 链接库到可执行文件
target_link_libraries(MyExecutable PRIVATE MyLibrary)

# 查找外部依赖(例如Boost)
# find_package(Boost REQUIRED COMPONENTS system thread)

# 如果找到外部依赖,则链接它们
# if(Boost_FOUND)
#   target_link_libraries(MyExecutable PRIVATE Boost::system Boost::thread)
# endif()

# 安装规则(库、可执行文件、头文件)
install(TARGETS MyLibrary MyExecutable
    EXPORT MyGenericProjectConfig
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
    INCLUDES DESTINATION include
)

# 安装CMake配置文件
install(EXPORT MyGenericProjectConfig
    FILE MyGenericProjectTargets.cmake
    NAMESPACE MyGenericProject::
    DESTINATION lib/cmake/MyGenericProject
)

# 包含CTest以支持单元测试(可选)
if(BUILD_TESTING)
    enable_testing()
    add_subdirectory(tests)
endif()

# 版本控制信息(Git为例,需确保项目在git仓库中)
include(GetGitRevisionDescription)
get_git_head_revision(GIT_REVISION_SHA1)
if(NOT GIT_REVISION_SHA1_ISdirty)
    set(PROJECT_VERSION "${GIT_REVISION_SHA1}")
else()
    set(PROJECT_VERSION "DIRTY-${GIT_REVISION_SHA1}")
endif()
message(STATUS "Building version ${PROJECT_VERSION}")

# 设置版本信息(可选择性地添加到生成的可执行文件或库中)
set_target_properties(MyExecutable PROPERTIES VERSION ${PROJECT_VERSION})
set_target_properties(MyLibrary PROPERTIES VERSION ${PROJECT_VERSION})

# (如果有额外的自定义步骤,比如生成文档、代码格式检查等,可以在此处添加)

请注意,你需要根据具体项目的需求修改上述模板中的项目名称、源文件路径、外部依赖查找、编译选项以及版本控制信息等内容。同时,对于实际的外部依赖查找,如Boost,在 find_package() 后面的部分应根据实际情况填写对应的组件和链接指令。对于版本控制,如果项目不是基于Git管理,或者不需要版本信息注入到目标属性中,那么这部分也可以删除或替换为适合项目本身的版本获取方式。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值