Natron 源码构建指南:qmake 与 CMake 双构建体系、依赖管理与验证流程
音视频视频处理图形学桌面应用【免费下载链接】NatronOpen-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry.项目地址https://gitcode.com/gh_mirrors/na/Natron点击查看免费下载导读本文以 Documentation/source/maintainers/building.rst 为骨架系统讲解 Natron开源节点式视频合成软件的两套并行构建系统——传统的qmake与正在成为首选的新式CMake。文章覆盖模块依赖图、捆绑与系统三方库的取舍、Qt 5/Qt 6 双工具链切换、构建类型与 Sanitizer 调试、astyle 代码风格钩子以及 Google Test 测试套件的验证方法。读完本文你将能够读懂 Natron 的构建配置、按需选择构建路线并完成一次可验证的源码编译。概述为何 Natron 维护两套构建系统Natron 的仓库中同时检入了两套独立且持续维护的构建系统选择哪一套取决于你的平台与偏好qmake—— 传统构建路线。入口是仓库根目录的 Project.pro它是一个TEMPLATE subdirs工程负责拉入所有模块与捆绑库共享配置集中在 global.pri 与 libs.pri 中平台相关的依赖位置则在 config-macports.pri 与 config-homebrew.pri 中声明。CMake—— 较新且日益受青睐的构建路线。入口是根目录的 CMakeLists.txt每个模块Engine、Gui、App、Renderer、Tests、HostSupport、PythonBin以及libs/下的各捆绑库各有一个CMakeLists.txt。CMake 最低要求3.16根 CMakeLists.txt 第 20 行写明cmake_minimum_required(VERSION 3.16.7)。两个需要注意的全局约束所有构建都必须使用 C17不仅仅是 CMake 构建。如果标准过旧Global/Macros.h 中的#if __cplusplus 201703L会触发#error Natron 2.6 requires C17编译失败。qmake 侧由 global.pri 的CONFIG c17以及针对 clang/xcode 的-stdc17显式保证CMake 侧则由根 CMakeLists.txt 的set(CMAKE_CXX_STANDARD 17)保证。无论使用哪套构建系统都请先确认工具链默认标准不低于 C17。改动源码布局必须同步更新两套构建系统。无论是新增文件、新增模块还是重命名都要同时修改相关的*.pro/*.pri与对应的CMakeLists.txt。只更新其中一套必然导致另一平台上的构建失败。平台相关的逐步安装说明包括如何获取第三方依赖位于仓库根目录的 INSTALL_LINUX.md、INSTALL_MACOS.md、INSTALL_WINDOWS.md 和 INSTALL_FREEBSD.md。本章building.rst则解释构建的结构让上述安装说明变得可理解。模块与构建顺序读懂 Project.pro 的依赖图Project.pro显式声明了模块依赖图阅读它是理解各部件如何拼装的最快途径。以下依赖声明与仓库中的 Project.pro 完全一致glog.depends gflags ceres.depends glog gflags libmv.depends gflags ceres openMVG.depends ceres Engine.depends libmv openMVG HostSupport libtess ceres Renderer.depends Engine Gui.depends Engine qhttpserver Tests.depends Gui Engine App.depends Gui Engine因此构建顺序是先构建捆绑库gflags、glog、ceres、libmv、openMVG、qhttpserver、hoedown、libtess然后是HostSupport接着是核心引擎Engine再是前端程序Renderer无 GUI 渲染器、Gui图形界面最后是App、Tests与PythonBin。Project.pro中还通过SUBDIRS列出了完整的子项目清单并用gflags.subdir libs/gflags之类的指令将每个子项目映射到实际源码目录。从 Project.pro 还可以看到版本配置机制构建时必须显式选择配置snapshot | alpha | beta | RC | stable | custombuild未选择时 qmake 会默认回退到Devel并打印提示custombuild需要环境变量BUILD_USER_NAME而BUILD_NUMBER环境变量可用于附加版本号如RC1、RC2。此外qmake 还支持CONFIGenable-breakpad引入 Breakpad 崩溃上报客户端见 Project.pro 与 global.pri。CMake 侧与 qmake 的模块划分保持一致根 CMakeLists.txt 依次add_subdirectory(libs)、HostSupport、Engine、PythonBin、Renderer、Gui并在NATRON_BUILD_TESTS开启时加入Tests最后是App。libs/CMakeLists.txt则根据find_package的结果有条件地加入各捆绑库例如if(NOT glog_FOUND)/if(NOT Ceres_FOUND)时才会编译捆绑版本这正是-DNATRON_SYSTEM_LIBSON生效的底层逻辑。第三方依赖捆绑 vs 系统库仓库内捆绑、随项目一起编译的依赖以下依赖捆绑在libs/目录下、作为项目的一部分从源码构建依赖用途ceres非线性最小二乘求解器供跟踪器使用openMVG多视图几何库跟踪器相关libmv跟踪器tracker本体Eigen3头文件式线性代数库gflags/glog命令行标志与日志hoedownMarkdown → HTML 渲染用于节点文档libtess多边形三角化用于 roto 绘制qhttpserver内部文档 Web 服务器SequenceParsing图像序列检测google-breakpad崩溃上报在 CMake 构建中传入-DNATRON_SYSTEM_LIBSON会用系统的副本替换其中一部分见根 CMakeLists.txt此时会find_package(glog)与find_package(Ceres)对应的捆绑子目录则跳过编译。必须由系统提供的依赖另一部分依赖必须预先安装在系统上Qt5 或 6详见下文Boost特别是boost::serialization用于工程文件等对象的序列化Python 3以及Shiboken / PySide用于 Python 绑定cairoroto/paint 光栅化Engine 的 CMake 通过pkg_check_modules(Cairo REQUIRED ... cairo fontconfig)强制要求OpenColorIOOpenGL此外读写节点插件会引入OpenImageIO与FFmpeg但它们位于独立的openfx-io仓库不在这里。构建者在规划依赖时需注意这一点。Qt 5 与 Qt 6版本切换与编译宏约束CMake 侧的工具链开关CMake 构建已经内置 Qt 版本切换选项根 CMakeLists.txtoption(NATRON_QT6 use Qt6 OFF)-DNATRON_QT6OFF默认针对Qt 5.15、Shiboken2与PySide2构建。-DNATRON_QT6ON针对Qt 6.3、Shiboken6与PySide6构建并额外要求OpenGLWidgets组件——因为 Qt 6 中QOpenGLWidget被移入了独立模块。CMake 源码中可见Qt6 分支会向QT_COMPONENTS追加OpenGLWidgets并分别find_package(Qt6 6.3 ...)、find_package(Shiboken6 6.3 ...)、find_package(PySide6 6.3 ...)。qmake 构建目前尚无等效开关仍以 Qt 5 为目标。完善并稳定 Qt 6 支持是当前活跃工作项具体迁移计划见 qt6-migration.rst。两个必须了解的编译宏CMake 构建中设置的两个编译定义会影响你编写代码的方式QT_NO_CAST_FROM_ASCII禁止从const char*隐式构造QString。Natron 将所有字符串按 UTF-8 处理因此字面量需要用QString::fromUtf8(…)包裹可翻译文本则走tr()机制。该宏在 qmake 侧同样启用见 global.pri并已在 Global/QtCompat.h 等兼容层中贯彻属于全项目级约束。QT_NO_DEBUG_OUTPUT仅 release 构建qDebug()输出在 release 构建中被编译掉。CMake 的根配置中非 Debug 构建会add_definitions(-DQT_NO_DEBUG_OUTPUT)。构建类型、Sanitizer 与调试CMake 在未指定构建类型时默认采用RelWithDebInfoDebug构建会额外定义DEBUG宏根 CMakeLists.txt 中IS_DEBUG_BUILD为真时add_definitions(-DDEBUG)并在 Windows 上追加-O最小优化以避免 Eigen 相关的链接问题。DEBUG构建会在启动时启用浮点异常捕获见 Global/FloatingPointExceptions.h 与main()函数。例如 App/NatronApp_main.cpp 中通过boost_adaptbx::floating_point::exception_trapping捕获division_by_zero | invalid | overflow三类异常这样任何意外的NaN或除零会立即中止程序而不是在图像管线中静默传播——这是排查数值问题的关键手段。同样机制也应用于 Renderer 的 main 入口。qmake 构建支持CONFIGaddresssanitizer构建AddressSanitizer版本见 Project.pro 与 global.pri 中-fsanitizeaddress -fno-omit-frame-pointer -fno-optimize-sibling-calls -O1的实际编译参数并支持CONFIGenable-breakpad构建带Breakpad崩溃上报的版本。另外 qmake 还提供了threadsanitizer、coverage、openmp、fast、nopch禁用预编译头等可选配置。代码风格与 pre-commit 钩子Natron 使用astyle强制统一的 C 代码风格。精确的调用参数固定在下述 pre-commit 钩子中astyle -p -H -f -j -z2 -c -k3 -U -A8钩子脚本位于 .git-hooks/pre-commit它会对暂存区中Global/、Engine/、Gui/、Readers/、Writers/目录下所有*.c/*.cpp/*.h文件正则^(Global|Engine|Gui|Readers|Writers)/.*\.(c|cpp|h)$运行 astyle并将格式化结果与暂存内容做 diff若文件尚未格式化会直接拒绝提交。注意钩子要求系统装有astyle否则会报错退出。每个 clone 只需安装一次cd Natron mkdir -p .git/hooks ln -s ../../.git-hooks/pre-commit .git/hooks/pre-commit若钩子报错请重新格式化并重新暂存违规文件astyle -p -H -f -j -z2 -c -k3 -U -A8 -n path/to/File.cpp git add path/to/File.cpp仓库还提供了 .clang-format 文件供编辑器集成使用但astyle 才是钩子所依据的权威格式化器。验证一次构建Google Test / Google Mock 测试套件Tests模块构建一套Google Test / Google Mock测试源码目录 Tests/。文档列出的测试用例包括Curve_Test、Lut_Test、Image_Test、Hash64_Test、KnobFile_Test、Tracker_Test、FileSystemModel_Test、OSGLContext_Test与 Tests/CMakeLists.txt 中的源文件清单一一对应。在 CMake 构建中测试通过enable_testing()注册到CTest根 CMakeLists.txt且默认构建除非传入-DNATRON_BUILD_TESTSOFF关闭Tests/CMakeLists.txt 中的add_test(NAME Tests COMMAND Tests)将其注册为 CTest 用例。构建完成后运行测试以确认工具链与你的改动都正常然后再提交 Pull Request# CMake 构建完成后的测试执行 ctest --test-dir build_dir # qmake 构建完成后直接运行测试二进制 ./build_dir/Tests/Tests这些测试横跨曲线计算Curve、LUT、图像处理、哈希、文件模型、跟踪器与 OpenGL 上下文等核心子系统是验证编译产物行为正确性的第一道关卡。结合上述构建类型选择——尤其是 Debug 构建下的浮点异常捕获——你可以在提交前同时获得编译期与运行期的双重保障。赞分享音视频视频处理图形学桌面应用【免费下载链接】NatronOpen-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry.项目地址https://gitcode.com/gh_mirrors/na/Natron点击查看免费下载相关推荐Ventoy 图形化配置5 分钟设置好启动密码与菜单主题Ventoy 图形化配置5 分钟设置好启动密码与菜单主题 当你想给 U 盘里某颗 ISO 单独加密码、或者把启动菜单换成自己的背景图时绕不开手动编辑 U 盘操作系统固件开发工具从源码构建 AppImageLauncher依赖准备、CMake 构建流程与安装详解从源码构建 AppImageLauncher依赖准备、CMake 构建流程与安装详解 AppImageLauncher 是 Linux 发行版中负责“入口”职桌面应用CLILAMMPS 从源码构建完全指南CMake 与 make 双体系详解LAMMPS 从源码构建完全指南CMake 与 make 双体系详解 本指南基于 LAMMPS 官方文档的 Build 系列页面 https://link.g科研科学计算高性能计算上一篇三步解包微信小程序unwxapkg 解 wxapkg 工具完整指南下一篇思源宋体TTF 免费商用完全手册7 个字重 5 分钟装好创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考