从零开始 CMake 学习笔记 (B)hello-headers

本文是关于CMake的学习笔记,以hello-headers为例,介绍了如何处理源文件和头文件的组织。内容包括文件结构解析,路径变量、源文件变量的使用,以及如何通过target_include_directories()管理Include目录。案例展示了CMake构建项目的标准输出和详细输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从零开始 CMake 学习笔记 (B)hello-headers

开始前先默念三遍口诀:

  1. Declare a target
  2. Declare target’s traits
  3. It’s all about targets

本系列主要根据GitHub上的 cmake-examples 项目进行翻译总结,同时对于不清晰的概念及函数进行查阅理解记录形成。

1 介绍

本案例展示了hello world 示例,该示例使用了不同的文件夹来作为 源文件 和 包含文件。整体的文件结构如下:

1.1 文件树B-hello-headers$ tree

B-hello-headers$ tree
.
├── CMakeLists.txt
├── include
   └── Hello.h
└── src
   └── Hello.cpp
   └── main.cpp

1.2 文件简介

  • CMakeLists.txt - 包含了你希望运行的 CMake 命令;
// 设置CMake运行时的最低版本
// $ cmake --version
cmake_minimum_required(VERSION 3.5)

// 设置工程名
project (hello_headers)

// 创建一个source变量链接到所有需要编译的的.cpp源文件
set(SOURCES
    src/Hello.cpp
    src/main.cpp
)

// 添加可执行文件
add_executable(hello_headers ${
   SOURCES})

// 设置可执行文件的需要包含的库的路径
// 相当于在运行 g++ 命令时通过下面命令指定 include 文件 : -I /directory/path/
target_include_directories(hello_headers
    PRIVATE 
        ${
   PROJECT_SOURCE_DIR}/include
)
  • include/Hello.h - 需要包含的头文件
#ifndef __HELLO_H__
#define __HELLO_H__

//创建 Hello 类,声明其 print() 方法
class Hello
{
   
public:
    void print();
};

#endif
  • src/Hello.cpp - 要编译的源文件
#include <iostream>

#include "Hello.h"

//类外重写 print() 方法
void Hello::print()
{
   
    std::cout << "Hello Headers!" << std::endl;
}
  • src/main.cpp - main文件
#include "Hello.h"

int main(int argc, char *argv[])
{
   
    Hello hi;
    hi.print();
    return 0;
}

2 概念解析

2.1 路径变量

CMake 语法指定了许多变量,这些变量可用于帮助在项目或源代码树中找到有用的目录。其中一些路径变量包括:

Variable Info
CMAKE_SOURCE_DIR 工程的根目录
CMAKE_CURRENT_SOURCE_DIR 当前源目录,如果使用子项目和目录时
PROJECT_SOURCE_DIR 当前 cmake 项
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值