01 仓外 C++ 项目
适用版本: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 找到安装时导出的安装包。
练习
- 在不移动 Frame 源码的前提下,把
frame-quickstart放到另一目录并重新构建。 - 将 shape 改为
{3, 2},确认输出仍为6。
下一章
继续02 核心概念。