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生成.out文件?_Cmake_Cmake Language - Fatal编程技术网

如何使用cmake生成.out文件?

如何使用cmake生成.out文件?,cmake,cmake-language,Cmake,Cmake Language,我正在交叉编译ARM Cortex-M,使用CMake进行项目配置 到目前为止,我已经成功地设置了项目,并且正在生成可执行文件。然而,为了使电路板闪烁,我需要一个“.hex”。文件 我遵循了用于gcc的北欧nRF5SDK示例,以获得有关编译和链接阶段的一些线索,并将它们传递给CMake例程 但是,我无法生成任何“.out”文件来正确提取“.hex”文件。 我玩过编译标志和链接器标志,但没有成功 我已经在工具链文件和编译器中设置了init标志,十六进制是使用自定义命令生成的: (...) add_

我正在交叉编译ARM Cortex-M,使用CMake进行项目配置

到目前为止,我已经成功地设置了项目,并且正在生成可执行文件。然而,为了使电路板闪烁,我需要一个“.hex”。文件

我遵循了用于gcc的北欧nRF5SDK示例,以获得有关编译和链接阶段的一些线索,并将它们传递给CMake例程

但是,我无法生成任何“.out”文件来正确提取“.hex”文件。 我玩过编译标志和链接器标志,但没有成功

我已经在工具链文件和编译器中设置了init标志,十六进制是使用自定义命令生成的:

(...)
add_executable(main main.c)
target_link_libraries(main sdk_lib)

add_custom_command(
        TARGET
            main
        POST_BUILD
        COMMAND
            ${ARM_OBJCOPY} -O ihex ${CMAKE_CURRENT_BINARY_DIR}/main${CMAKE_EXECUTABLE_SUFFIX} ${CMAKE_SOURCE_DIR}/main.hex
)
(...)
问题是我使用二进制文件来提取十六进制,而不是一个正确的“.out”文件

如何在不使用与主构建并行的另一个自定义命令的情况下生成它


备注:这是项目的当前状态

为什么会出现问题?
所以我找到了问题的根源。 基本上,elf文件没有很好地生成,因此.hex自然也有问题

现在的问题是要理解为什么精灵被破坏了,它正在超越我的知识。 我已经用sdk代码将sdk_库构建为静态的,并包含了头文件所在的目录。我添加了可执行文件并将main与sdk_lib链接

当我分析编译过程时,所有的OBJ文件都被生成,并在最后被链接。但有些奇怪的事我不明白

[95%] Building C object CMakeFiles/main.dir/main.c.obj
/opt/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-gcc -DBOARD_PCA10040 -DBSP_DEFINES_ONLY -DCONFIG_GPIO_AS_PINRESET -DFLOAT_ABI_HARD -DNRF52 -DNRF52832_XXAA -DNRF52_PAN_74 -D__HEAP_SIZE=8192 -D__STACK_SIZE=8192 -I/opt/nRF5_SDK_15.3.0_59ac345/components -I/opt/nRF5_SDK_15.3.0_59ac345/modules/nrfx/mdk -I/opt/nRF5_SDK_15.3.0_59ac345/components/libraries/strerror -I/opt/nRF5_SDK_15.3.0_59ac345/components/toolchain/cmsis/include -I/opt/nRF5_SDK_15.3.0_59ac345/components/libraries/util -I/opt/nRF5_SDK_15.3.0_59ac345/components/libraries/balloc -I/opt/nRF5_SDK_15.3.0_59ac345/components/libraries/ringbuf -I/opt/nRF5_SDK_15.3.0_59ac345/modules/nrfx/hal -I/opt/nRF5_SDK_15.3.0_59ac345/components/libraries/bsp -I/opt/nRF5_SDK_15.3.0_59ac345/components/libraries/log -I/opt/nRF5_SDK_15.3.0_59ac345/modules/nrfx -I/opt/nRF5_SDK_15.3.0_59ac345/components/libraries/experimental_section_vars -I/opt/nRF5_SDK_15.3.0_59ac345/components/libraries/delay -I/opt/nRF5_SDK_15.3.0_59ac345/integration/nrfx -I/opt/nRF5_SDK_15.3.0_59ac345/components/drivers_nrf/nrf_soc_nosd -I/opt/nRF5_SDK_15.3.0_59ac345/components/libraries/atomic -I/opt/nRF5_SDK_15.3.0_59ac345/components/boards -I/opt/nRF5_SDK_15.3.0_59ac345/components/libraries/memobj -I/opt/nRF5_SDK_15.3.0_59ac345/external/fprintf -I/opt/nRF5_SDK_15.3.0_59ac345/components/libraries/log/src -I/opt/nRF5_SDK_15.3.0_59ac345/examples/peripheral/blinky/pca10040/blank/config  -O0 -g0         -mcpu=cortex-m4         -mthumb         -mabi=aapcs         -Wall         -Wextra         -mfloat-abi=hard         -mfpu=fpv4-sp-d16         -ffunction-sections         -fdata-sections         -fno-strict-aliasing         -fno-builtin         -fshort-enums -g   -o CMakeFiles/main.dir/main.c.obj   -c /home/ricardo/Git/cmake-arm-toolchain/main.c
[100%] Linking C executable main
/home/ricardo/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/192.6603.37/bin/cmake/linux/bin/cmake -E cmake_link_script CMakeFiles/main.dir/link.txt --verbose=1
/opt/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-gcc -O0 -g0         -mcpu=cortex-m4         -mthumb         -mabi=aapcs         -Wall         -Wextra         -mfloat-abi=hard         -mfpu=fpv4-sp-d16         -ffunction-sections         -fdata-sections         -fno-strict-aliasing         -fno-builtin         -fshort-enums -g  -O0         -g0         -mcpu=cortex-m4         -mthumb         -mabi=aapcs         -mfloat-abi=hard         -mfpu=fpv4-sp-d16         -Wl,--gc-sections         --specs=nano.specs         --specs=nosys.specs -L/opt/nRF5_SDK_15.3.0_59ac345/modules/nrfx/mdk -T/home/ricardo/Git/cmake-arm-toolchain/linker.ld -lc -lnosys -lm CMakeFiles/main.dir/main.c.obj  -o main libsdk_lib.a 
/opt/gcc-arm-none-eabi-8-2019-q3-update/bin/../lib/gcc/arm-none-eabi/8.3.1/../../../../arm-none-eabi/bin/ld: warning: cannot find entry symbol Reset_Handler; defaulting to 0000000000000000
make[3]: Leaving directory '/home/ricardo/Git/cmake-arm-toolchain/cmake-build-debug'
[100%] Built target main
正在调用的链接器不是arm none eabi ld,而是toolchain文件夹中的另一个链接器。因此,我开始思考链接过程是否正确执行,所有对象文件是否都构建在一个elf文件中。
我现在有点迷失在这个过程中。

你不能。您必须调用objcopy。这并不是那么糟糕,一旦开始调试,无论如何都需要elf文件。用它做一个tho<代码>要刷新板,我需要一个“.hex”。文件-真奇怪。Openocd和gdb可以闪存elf文件。
你不能。您必须调用objcopy。
这就是我现在要做的。但是objcopy可以处理对象文件,这就是我遇到的问题。嗯,你说得对。当我说我需要一个“.hex”时,我实际上是在使用nRF命令行工具,而nrfjprog只使用“.hex”。我将探索更多的OpenOCD,因为我正在使用CLion,这可能是一个更好的选择。我有
st flash
,它最好只使用十六进制,我只是简单地使用它包装
objcopy处理对象文件,这就是我遇到的问题
-为什么会有问题?您将始终从编译中获得一个elf文件。然后您只需
objcopy
it。