Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 使用arm编译器将十六进制文件转换为二进制文件';s';fromelf';_Cmake_Arm - Fatal编程技术网

Cmake 使用arm编译器将十六进制文件转换为二进制文件';s';fromelf';

Cmake 使用arm编译器将十六进制文件转换为二进制文件';s';fromelf';,cmake,arm,Cmake,Arm,在linux机器下,我使用ARMCompiler6.6.1生成一个使用一些.c和.asm文件的可执行文件。 我也在使用cmake来构建目标 我已经创建了目标,比如my_target.hex。它有一个十六进制扩展名,因为它是编译器的输出格式。 现在我需要一个.bin文件,所以我做了一些研究,发现这个编译器有一个名为“fromelf”的工具,可以将文件从十六进制转换为二进制 我发现forelf的语法如下: fromelf--bin--output=outfile.bin infle.hex 我正在使

在linux机器下,我使用ARMCompiler6.6.1生成一个使用一些.c和.asm文件的可执行文件。 我也在使用cmake来构建目标

我已经创建了目标,比如my_target.hex。它有一个十六进制扩展名,因为它是编译器的输出格式。 现在我需要一个.bin文件,所以我做了一些研究,发现这个编译器有一个名为“fromelf”的工具,可以将文件从十六进制转换为二进制

我发现forelf的语法如下: fromelf--bin--output=outfile.bin infle.hex

我正在使用cmake运行“fromelf”工具,并使用ADD_CUSTOM_命令和POST-BUILD选项运行。像这样:

ADD_CUSTOM_COMMAND(
    TARGET my_target POST_BUILD
    COMMAND /opt/ARMCompiler6.6.1/bin/fromelf --bin path/to/target/my_target.elf --output path/to/generated/bin/file/my_target.bin 
    COMMENT "Converting binary file from elf"
)
运行此命令后,我希望在指定目标处看到一个.bin文件。但是,与此相反,我看到了3个文件: 文本、mk_异常表和mk_异常表内存


那个“文本”文件看起来像一个二进制文件,所以我把它重命名为我的_target.bin。这样做对吗?为什么我得到的是输出,而不是命令后的一些.bin文件?
谢谢你的阅读

“为什么我得到的是那个输出,而不是命令后的某个.bin文件?”-CMake只是执行您在命令选项中传递的命令行。确保命令的参数引用实际文件。如果需要从特定目录执行该命令,请添加适当的工作目录选项(默认情况下,该命令在当前生成目录中执行)。您可以使用相同的参数从命令行运行工具,并检查结果文件,而不是添加此自定义命令。不需要在某些特定目录中指定该命令。它只需要输入文件的路径和另一个路径来为将要创建的文件指定所需的路径。我将尝试您所说的(独立于cmake运行命令)并查看结果。为什么不从一开始构建elf(工具链可能会这样做),然后将其转换为各种格式(intel hex、motorola srecord、二进制内存映像等)?并不是说你不能很容易地从英特尔十六进制到二进制图像。出于教育目的,我建议您自己编写30行代码来进行转换。