标准CMake项目文件(CMakeLists.txt)说明

1、常用固定部分

  • 最低 CMake 版本
  • 项目名称和语言
  • 编译选项(可选)
  • 源文件与目标文件
  • 依赖库
  • 安装规则(可选)
  • 测试(可选)

2、最小标准示例

cmake_minimum_required(VERSION 3.16)   # 指定最低 CMake 版本

project(MyApp LANGUAGES CXX)          # 工程名和语言

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)         # 禁止 gnu++ 扩展,强制标准 C++

# 源码
set(SOURCES
    src/main.cpp
    src/foo.cpp
    src/foo.h
)

# 生成可执行文件
add_executable(${PROJECT_NAME} ${SOURCES})

# 链接库(示例)
# target_link_libraries(${PROJECT_NAME} PRIVATE pthread)

# 添加 include 路径
target_include_directories(${PROJECT_NAME}
    PRIVATE
        ${PROJECT_SOURCE_DIR}/src
)

# 安装规则
install(TARGETS ${PROJECT_NAME} DESTINATION bin)

3、带子目录和库

项目结构

MyProject/
├── CMakeLists.txt
├── src/
│   ├── CMakeLists.txt
│   ├── main.cpp
│   └── foo.cpp
│   └── foo.h
└── lib/
    ├── CMakeLists.txt
    └── bar.cpp
    └── bar.h

顶层CMakeLists.txt

cmake_minimum_required(VERSION 3.16)

project(MyProject LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 添加子目录
add_subdirectory(lib)
add_subdirectory(src)

src中的CMakeLists

set(SOURCES
    main.cpp
    foo.cpp
)

add_executable(MyApp ${SOURCES})
target_include_directories(MyApp PRIVATE ${PROJECT_SOURCE_DIR}/lib)
target_link_libraries(MyApp PRIVATE MyLib)   # 依赖 lib 里的库

lib中的CMakeLists

set(LIB_SOURCES
    bar.cpp
)

add_library(MyLib ${LIB_SOURCES})
target_include_directories(MyLib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

注意:以Clion为例,如果修改了CMake文件或者添加了多个add_executable,生成不同的可执行文件,一定要reload重新加载CMake文件

add_library(MyApp  #库文件
    src/test.cpp
    serc/test1.cpp
)
add_executable(demo1 src/apps/demo1.cpp) #添加可执行程序demo1
add_executable(demo2 src/apps/demo2.cpp) #添加可执行程序demo2
target_link_libraries(demo1 PRIVATE MyApp) #将demo1链接到MyApp库
target_link_libraries(demo2 PRIVATE MyApp) #将demo2链接到MyApp库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值