适用版本:Frame v1.3 M28,C++20;Python 绑定 0.1.0(可选)

最后更新:2026-07-25

本章是非规范性使用说明;C++ 安装包导出以构建与测试为准。

学习目标

在 Frame 仓库之外创建、配置、链接并运行最短的独立 C++ 项目。

前置

完成00 从源码安装,并在当前 shell 中保留 FRAME_PREFIX。项目目录可以与 <frame-source> 平级,也可以位于任意其他位置;它不得引用 Frame 的 src/examples/ 或源码 include/ 路径。

可运行代码

先在 Frame 仓库之外创建目录:

mkdir -p "$HOME/frame-tutorial/frame-quickstart"
cd "$HOME/frame-tutorial/frame-quickstart"

然后创建两个文件:

frame-quickstart/
├── CMakeLists.txt
└── main.cpp

CMakeLists.txt

cmake_minimum_required(VERSION 3.24)
project(frame_quickstart LANGUAGES CXX)

find_package(frame CONFIG REQUIRED)

add_executable(frame_quickstart main.cpp)
target_compile_features(frame_quickstart PRIVATE cxx_std_20)
target_link_libraries(frame_quickstart PRIVATE frame::frame)

main.cpp

#include <iostream>

#include <frame/core/shape.h>

int main() { std::cout << frame::Shape({2, 3}).numel() << '\n'; }

frame-quickstart/ 中配置、构建并运行:

CMAKE_PREFIX_PATH="$FRAME_PREFIX" cmake -S . -B build
cmake --build build
./build/frame_quickstart

预期输出

6

PyTorch 对照

import torch

print(torch.Size([2, 3]).numel())

两边都只计算 shape 的元素数,不分配运行期 Tensor。参考:PyTorch torch.Size

继续运行 Tensor 示例

00_quickstart 由 CTest 构建并运行,章内源码与它保持一致。需要完整的运行期 Tensor 分配、读写示例时,继续阅读01_tensor_basics

边界

  • 本例只验证安装包消费与 Shape::numel();不创建或分配运行期 Tensor。
  • 章节中的项目由读者在仓外创建;仓内配套源码仅供学习和 CTest 覆盖,不是仓外工程的依赖。

小结

  • 外部工程通过 find_package(frame CONFIG REQUIRED)frame::frame 使用 Frame。
  • FRAME_PREFIX 让 CMake 找到安装时导出的安装包。

练习

  1. 在不移动 Frame 源码的前提下,把 frame-quickstart 放到另一目录并重新构建。
  2. 将 shape 改为 {3, 2},确认输出仍为 6

下一章

继续02 核心概念