问题描述
我正在使用 mcc 将我的 Matlab 函数编译成我的目标平台的独立可执行文件。我希望能够在运行可执行文件时引用在构建时写入可执行文件的全局变量。
例如
-
在构建时,我提取存储库的 git commit hash,
commitHash
这里的挑战是提交哈希仅在构建时已知,并且独立可执行文件在运行时将不再位于存储库中。
谢谢!
解决方法
您可以编写一个使用 system
调用 git
程序并查询提交 ID 的 MATLAB 函数,然后创建一个简单的 M 文件函数 (commitHash.m
) 返回此值,它只是将 M 文件写入磁盘。
这个生成的函数用在你想要输出提交 ID 的代码中。 mcc
程序将在独立可执行文件的包中包含此函数。
您可以编写一个构建脚本,它只需调用生成 commitHash.m
M 文件的函数,然后调用 mcc
。这可确保每次构建包时更新 commitHash.m
文件。
使用提交 ID 生成的 M 文件将是这样的:
function id = commitHash
id = '0123456789abcdef';
这是在 MATLAB 中创建常量的标准方法。在您的程序中,您可以这样使用它:
fprintf('My program,commit ID: %s\n',commitHash);
这样做的好处,而不是将 ID 嵌入到您的实际程序中,这样您就不会修改存储库中的代码——提交更改将更改提交 ID,这将是奇怪。
将 commitHash.m
文件添加到您的 .gitignore
文件以防止其被提交。