在独立的 Matlab 可执行文件中嵌入全局变量?

Embedding a global variable in standalone Matlab executable?

我正在使用 mcc 将我的 Matlab 函数编译成适用于我的目标平台的独立可执行文件。我希望能够引用在构建时写入可执行文件的全局变量,当 运行 可执行文件时。

例如

  1. 在构建时,我提取存储库的 git 提交哈希,commitHash

  2. commitHash 以某种方式成为我的可执行文件中的全局变量

  3. 我的可执行文件(文件)的每个输出都标有 commitHash

这里的挑战是提交哈希仅在构建时已知,并且独立可执行文件在 运行 时将不再位于存储库中。

谢谢!

您可以编写一个使用 system 调用 git 程序并查询提交 ID 的 MATLAB 函数,然后创建一个简单的 M 文件函数 (commitHash.m) returns 这个值,它只是将 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 文件以防止它被提交。