编译宏文档

May 18, 2025 · View on GitHub

本文档列出了nndeploy项目中可用的编译宏选项,帮助开发者根据需求配置构建过程。

1. 编译宏编辑规则

对于绝大部分编译选项,只用ON/OFF即可。

但对于外部依赖的三方库,有如下三种使能并链接外部的第三方库的方法

  • 方法一:路径path,头文件以及库的根路径,其形式必须修改为
    • 头文件:path/include
    • 库:path/lib
    • windows dll: path/bin
    • 相应的库:ONNXRuntime、OpenVINO、TNN、MNN、Window已经编译好的OpenCV的库
  • 方法二:开关ON,如果你安装了该库,并且可以通过find_package找到该库,可以采用该方式
    • 相应的库:Linux平台下的CUDA、CUDNN、TenosrRT、OpenCV
  • 方法三:源码ON,使用源码编译该库,对应third_party目录下的库,可以采用该方式
    • 相应的库:tokenizer-cpp、rapidjson、gflags、ONNX

2.基础构建选项(建议采用默认值)

默认值描述
ENABLE_NNDEPLOY_BUILD_SHAREDON构建为共享库而非静态库
ENABLE_NNDEPLOY_SYMBOL_HIDEOFF隐藏库中的符号以减小二进制大小
ENABLE_NNDEPLOY_COVERAGEOFF启用代码覆盖率分析
ENABLE_NNDEPLOY_CXX11_ABIOFF使用C++11 ABI
ENABLE_NNDEPLOY_CXX14_ABIOFF使用C++14 ABI
ENABLE_NNDEPLOY_CXX17_ABION使用C++17 ABI(推荐)
ENABLE_NNDEPLOY_CXX20_ABIOFF使用C++20 ABI
ENABLE_NNDEPLOY_OPENMPOFF启用OpenMP进行并行计算
ENABLE_NNDEPLOY_ADDRESS_SANTIZEROFF启用地址消毒器进行内存错误检测
ENABLE_NNDEPLOY_DOCSOFF构建文档
ENABLE_NNDEPLOY_TIME_PROFILERON启用时间分析器进行性能分析
ENABLE_NNDEPLOY_RAPIDJSONON启用RapidJSON进行JSON解析,基于path/to/nndeploy/third_party/rapidjson源码编译

3. 核心模块选项(建议采用默认值)

默认值描述
ENABLE_NNDEPLOY_BASEON启用包含基础工具的基础模块
ENABLE_NNDEPLOY_THREAD_POOLON启用线程池进行并行任务执行
ENABLE_NNDEPLOY_CRYPTIONOFF启用加密模块进行模型加密/解密(尚未实现)
ENABLE_NNDEPLOY_DEVICEON启用设备模块
ENABLE_NNDEPLOY_IRON启用中间表示(IR)模块
ENABLE_NNDEPLOY_IR_ONNXOFF在IR模块中启用ONNX格式支持,默认关闭
ENABLE_NNDEPLOY_OPON启用算子模块
ENABLE_NNDEPLOY_OP_ASCEND_COFF启用Ascend C算子
ENABLE_NNDEPLOY_NETON启用神经网络图表示
ENABLE_NNDEPLOY_INFERENCEON启用推理模块
ENABLE_NNDEPLOY_INFERENCE_DEFAULTON启用默认推理后端
ENABLE_NNDEPLOY_DAGON启用有向无环图用于模型流水线
ENABLE_NNDEPLOY_PLUGINON启用算法插件
ENABLE_NNDEPLOY_TESTON构建测试用例
ENABLE_NNDEPLOY_DEMOON构建执行程序
ENABLE_NNDEPLOY_PYTHONON构建Python绑定

4. 设备后端选项(可选项,默认全部关闭,可以不依赖任何设备后端)

默认值描述
ENABLE_NNDEPLOY_DEVICE_CUDAOFF启用NVIDIA CUDA GPU支持,启用后,也必须打开ENABLE_NNDEPLOY_DEVICE_CUDNN
ENABLE_NNDEPLOY_DEVICE_ROCMOFF启用AMD ROCm GPU支持
ENABLE_NNDEPLOY_DEVICE_SYCLOFF启用SYCL跨平台加速
ENABLE_NNDEPLOY_DEVICE_OPENCLOFF启用OpenCL加速
ENABLE_NNDEPLOY_DEVICE_OPENGLOFF启用OpenGL计算支持
ENABLE_NNDEPLOY_DEVICE_METALOFF启用Apple Metal GPU加速
ENABLE_NNDEPLOY_DEVICE_VULKANOFF启用Vulkan计算支持
ENABLE_NNDEPLOY_DEVICE_HEXAGONOFF启用高通Hexagon DSP支持
ENABLE_NNDEPLOY_DEVICE_MTK_VPUOFF启用联发科VPU支持
ENABLE_NNDEPLOY_DEVICE_ASCEND_CLOFF启用华为Ascend计算语言支持
ENABLE_NNDEPLOY_DEVICE_APPLE_NPUOFF启用Apple神经引擎支持
ENABLE_NNDEPLOY_DEVICE_QUALCOMM_NPUOFF启用高通NPU支持
ENABLE_NNDEPLOY_DEVICE_MTK_NPUOFF启用联发科NPU支持
ENABLE_NNDEPLOY_DEVICE_SOPHON_NPUOFF启用算丰NPU支持

5. 算子后端选项(可选项,默认关闭,可以不依赖任何算子后端)

默认值描述
ENABLE_NNDEPLOY_DEVICE_CUDNNOFF启用NVIDIA cuDNN加速库
ENABLE_NNDEPLOY_DEVICE_X86_ONEDNNOFF启用X86 ONEDNN加速库
ENABLE_NNDEPLOY_DEVICE_ARM_XNNPACKOFF启用ARM XNNPACK加速库
ENABLE_NNDEPLOY_DEVICE_ARM_QNNPACKOFF启用ARM QNNPACK加速库

6. 推理后端选项(可选项,默认关闭,可以不依赖任何推理后端)

默认值描述
ENABLE_NNDEPLOY_INFERENCE_TENSORRTOFF启用NVIDIA TensorRT后端,必须打开ENABLE_NNDEPLOY_DEVICE_CUDNN,ENABLE_NNDEPLOY_DEVICE_CUDA
ENABLE_NNDEPLOY_INFERENCE_OPENVINOOFF启用Intel OpenVINO后端
ENABLE_NNDEPLOY_INFERENCE_COREMLOFF启用Apple Core ML后端
ENABLE_NNDEPLOY_INFERENCE_TFLITEOFF启用TensorFlow Lite后端
ENABLE_NNDEPLOY_INFERENCE_ONNXRUNTIMEOFF启用ONNX Runtime后端
ENABLE_NNDEPLOY_INFERENCE_NCNNOFF启用腾讯NCNN后端
ENABLE_NNDEPLOY_INFERENCE_TNNOFF启用腾讯TNN后端
ENABLE_NNDEPLOY_INFERENCE_MNNOFF启用阿里巴巴MNN后端
ENABLE_NNDEPLOY_INFERENCE_TVMOFF启用Apache TVM后端
ENABLE_NNDEPLOY_INFERENCE_PADDLELITEOFF启用百度PaddleLite后端
ENABLE_NNDEPLOY_INFERENCE_RKNN_TOOLKIT_1OFF启用瑞芯微RKNN Toolkit 1.x后端
ENABLE_NNDEPLOY_INFERENCE_RKNN_TOOLKIT_2OFF启用瑞芯微RKNN Toolkit 2.x后端
ENABLE_NNDEPLOY_INFERENCE_ASCEND_CLOFF启用华为Ascend CL后端,必须打开ENABLE_NNDEPLOY_DEVICE_ASCEND_CL
ENABLE_NNDEPLOY_INFERENCE_SNPEOFF启用高通SNPE后端
ENABLE_NNDEPLOY_INFERENCE_QNNOFF启用高通Neural Network后端
ENABLE_NNDEPLOY_INFERENCE_SOPHONOFF启用算丰后端
ENABLE_NNDEPLOY_INFERENCE_TORCHOFF启用PyTorch/LibTorch后端
ENABLE_NNDEPLOY_INFERENCE_TENSORFLOWOFF启用TensorFlow后端
ENABLE_NNDEPLOY_INFERENCE_NEUROPILOTOFF启用联发科NeuroPilot后端

7. 算法插件选项

默认值描述
ENABLE_NNDEPLOY_OPENCVON or path启用OpenCV支持(多个算法部署插件需要,强依赖OpenCV)
ENABLE_NNDEPLOY_PLUGIN_PREPROCESSON启用预处理插件
ENABLE_NNDEPLOY_PLUGIN_INFERON启用推理插件
ENABLE_NNDEPLOY_PLUGIN_CODECON启用编解码插件
ENABLE_NNDEPLOY_PLUGIN_TOKENIZERON启用分词器插件
ENABLE_NNDEPLOY_PLUGIN_TOKENIZER_CPPOFF启用C++分词器插件, 依赖tokenizer-cpp,基于path/to/nndeploy/third_party/tokenizer-cpp源码编译
ENABLE_NNDEPLOY_PLUGIN_CLASSIFICATIONON启用分类插件
ENABLE_NNDEPLOY_PLUGIN_LLMOFF启用大型语言模型插件
ENABLE_NNDEPLOY_PLUGIN_DETECTON启用检测插件
ENABLE_NNDEPLOY_PLUGIN_DETECT_DETRON启用DETR检测插件
ENABLE_NNDEPLOY_PLUGIN_DETECT_YOLOON启用YOLO检测插件
ENABLE_NNDEPLOY_PLUGIN_SEGMENTON启用分割插件
ENABLE_NNDEPLOY_PLUGIN_SEGMENT_SEGMENT_ANYTHINGON启用Segment Anything分割插件
ENABLE_NNDEPLOY_PLUGIN_SEGMENT_RMBGON启用背景移除分割插件
ENABLE_NNDEPLOY_PLUGIN_STABLE_DIFFUSIONOFF启用Stable Diffusion插件

8. 编译选项举例说明

  • nndeploy通过路径的方式链接推理后端ONNXRuntimeset(ENABLE_NNDEPLOY_INFERENCE_ONNXRUNTIME "path/to/onnxruntime"),如果你想启用并链接其他推理后端(OpenVINO、MNN、TNN …),也可做同样的处理
  • nndeploy通过find_package的方式链接推理后端TensorRTset(ENABLE_NNDEPLOY_INFERENCE_TENSORRT ON),对于其他可以通过find_package找到的库,也可做同样的处理
  • nndeploy通过源码的方式链接三方库tokenizer-cppset(ENABLE_NNDEPLOY_PLUGIN_TOKENIZER_CPP ON),对于其他可以通过源码编译的库,也做同样的处理(目前所有third_party中的库都是通过源码编译的)
  • 编译算法的插件。首先将模型类别set(NABLE_NNDEPLOY_PLUGIN_XXX ON),再将具体的模型set(NABLE_NNDEPLOY_PLUGIN_XXX_YYY ON)