我正在尝试使用GCC交叉编译器为ARM目标交叉编译一个项目。我创建了一个目标并设置了像ABI标志(-mcpu,-mfpu等)这样的东西。使用target_compile_options()并定义哪个target_compile_definitions()。然而,我现在有一个问题,这些标志也被传递给汇编程序调用。有没有办法对汇编程序调用使用单独的汇编程序标志?
[ 65%] Building CXX object CMakeFiles/fsfw_example.dir/bsp_stm32/main.cpp.obj
arm-none-eabi-g++ -DSTM32H743xx -DUSE_HAL_DRIVER
-Ibla\bla <more includes here> -g -specs=nosys.specs
-specs=nano.specs -mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard
-mthumb -ffunction-sections -fdata-sections
-std=gnu++11 -o CMakeFiles\fsfw_example.dir\bsp_stm32\main.cpp.obj
-c C:\Users\Robin\Documents\FSFW\fsfw_example\bsp_stm32\main.cpp
[ 66%] Building ASM object CMakeFiles/fsfw_example.dir/bsp_stm32/startup_stm32h743xx.s.obj
arm-none-eabi-as -DSTM32H743xx -DUSE_HAL_DRIVER -Ibla\bla <more includes here>
-mcpu=cortex-m7;-mfpu=fpv5-d16;-mfloat-abi=hard;-mthumb -g -specs=nosys.specs
-specs=nano.specs -mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard -mthumb
-ffunction-sections -fdata-sections -o CMakeFiles\fsfw_example.dir\bsp_stm32\startup_stm32h743xx.s.obj
-c C:\Users\Robin\Documents\FSFW\fsfw_example\bsp_stm32\startup_stm32h743xx.s问题是:arm-none eabi-as无法处理定义。有没有可能专门在汇编编译过程中删除它们?我还尝试设置特定于源代码的标志,但这似乎不起作用,目标编译选项/定义似乎具有优先级。
仁慈地问候罗宾
发布于 2020-12-21 03:45:27
我设法解决了这个问题,方法是使用arm-none-eabi-gcc编译器,并将带有cpp选项的-x汇编程序作为CMAKE_ASM_COMPILER,让GCC在汇编之前通过C预处理器运行它。为此,我使用了生成器表达式:
target_compile_options(${TARGET_NAME} PRIVATE
$<$<COMPILE_LANGUAGE:C>:${C_DEFS} ${C_FLAGS}>
$<$<COMPILE_LANGUAGE:CXX>:${CXX_DEFS} ${CXX_FLAGS}>
$<$<COMPILE_LANGUAGE:ASM>:-x assembler-with-cpp ${ASM_FLAGS}>
)使用arm-none-eabi-as只能处理像.macro这样的汇编指令,而不能处理像#define这样的CPP指令(这需要CPP)。直接使用as时,带有#的行可能会被视为注释。
https://stackoverflow.com/questions/65371607
复制相似问题