我正在使用mcc将我的Matlab函数编译为适用于我的目标平台的独立可执行文件。我希望在运行可执行文件时,能够引用在构建时写入可执行文件的全局变量。
例如
-
在构建时,我提取存储库的git提交哈希
commitHash
-
commitHash
以某种方式成为我的可执行中的全局变量 -
我的可执行文件(一个文件(的每个输出都用
commitHash
标记
这里的挑战是提交哈希只有在构建时才知道,并且独立的可执行文件在运行时将不再在存储库中。
谢谢!
您可以编写一个MATLAB函数,该函数使用system
调用git
程序并查询提交ID,然后创建一个简单的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: %sn', commitHash);
这样做的好处是,不将ID嵌入实际程序中,这样就不会修改存储库中的代码——提交更改会更改提交ID,这会很奇怪。
将commitHash.m
文件添加到.gitignore
文件中,以防止其被提交。