matlab 编码器 - 在创建的 C 代码中更改格式
matlab coder - change format in created C code
我正在使用 Matlab 编码器将代码移植到 C,例如对于下一个功能:
function sum_out = my_sum( x )
sum_out = 0;
for i=1:size(x,1)
sum_out = sum_out + x(i);
end
end
生成的C代码为:
double my_sum(const double x[10])
{
double sum_out;
int i;
sum_out = 0.0;
for (i = 0; i < 10; i++) {
sum_out += x[i];
}
return sum_out;
}
有没有办法让缩进4个空格?
此外,我想将大括号放在单独的一行中。
如果您有 Embedded Coder,配置设置 IndentSize
和 IndentStyle
允许您调整您所请求的行为:
https://www.mathworks.com/help/coder/ref/coder.embeddedcodeconfig.html?s_tid=doc_ta
更一般地说,如果您希望进一步自定义生成的代码格式,您可以考虑 运行在其上安装一个外部代码格式工具,例如 clang-format
。
答案:
展示了如何实现自动化。为了完整起见,我将在此处重现这些步骤。
编码器配置设置 PostCodeGenCommand
允许您在代码生成完成后但在 C/C++ 编译器 运行 之前 运行 一些 MATLAB 代码。所以你可以用它来调用 clang-format
.
制作文件doclangformat.m
:
function doclangformat(buildInfo)
sourceFiles = join(buildInfo.getSourceFiles(true,true));
sourceFiles = sourceFiles{1};
cmd = ['clang-format -i -style=''{BasedOnStyle: LLVM, ColumnLimit: 20}'' ' sourceFiles];
system(cmd);
我把ColumnLimit
设为20所以效果很明显。代码将被彻底包裹。您可以在 clang-format documentation.
中查看其他选项
设置配置对象并调用codegen
:
cfg = coder.config('lib');
cfg.PostCodeGenCommand = 'doclangformat(buildInfo)';
codegen foo -config cfg <other codegen args>
现在您应该看到您的代码被包装到大约 20 列。
这种方法的主要缺点是需要在您的 clang-format
规范中指定其他 Coder 样式设置,如 IndentStyle
、IndentSize
等。
我正在使用 Matlab 编码器将代码移植到 C,例如对于下一个功能:
function sum_out = my_sum( x )
sum_out = 0;
for i=1:size(x,1)
sum_out = sum_out + x(i);
end
end
生成的C代码为:
double my_sum(const double x[10])
{
double sum_out;
int i;
sum_out = 0.0;
for (i = 0; i < 10; i++) {
sum_out += x[i];
}
return sum_out;
}
有没有办法让缩进4个空格?
此外,我想将大括号放在单独的一行中。
如果您有 Embedded Coder,配置设置 IndentSize
和 IndentStyle
允许您调整您所请求的行为:
https://www.mathworks.com/help/coder/ref/coder.embeddedcodeconfig.html?s_tid=doc_ta
更一般地说,如果您希望进一步自定义生成的代码格式,您可以考虑 运行在其上安装一个外部代码格式工具,例如 clang-format
。
答案:
展示了如何实现自动化。为了完整起见,我将在此处重现这些步骤。
编码器配置设置 PostCodeGenCommand
允许您在代码生成完成后但在 C/C++ 编译器 运行 之前 运行 一些 MATLAB 代码。所以你可以用它来调用 clang-format
.
制作文件
doclangformat.m
:function doclangformat(buildInfo) sourceFiles = join(buildInfo.getSourceFiles(true,true)); sourceFiles = sourceFiles{1}; cmd = ['clang-format -i -style=''{BasedOnStyle: LLVM, ColumnLimit: 20}'' ' sourceFiles]; system(cmd);
我把
ColumnLimit
设为20所以效果很明显。代码将被彻底包裹。您可以在 clang-format documentation. 中查看其他选项
设置配置对象并调用
codegen
:cfg = coder.config('lib'); cfg.PostCodeGenCommand = 'doclangformat(buildInfo)'; codegen foo -config cfg <other codegen args>
现在您应该看到您的代码被包装到大约 20 列。
这种方法的主要缺点是需要在您的 clang-format
规范中指定其他 Coder 样式设置,如 IndentStyle
、IndentSize
等。