首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编程序的CMake分隔标志

汇编程序的CMake分隔标志
EN

Stack Overflow用户
提问于 2020-12-19 23:49:55
回答 1查看 804关注 0票数 0

我正在尝试使用GCC交叉编译器为ARM目标交叉编译一个项目。我创建了一个目标并设置了像ABI标志(-mcpu,-mfpu等)这样的东西。使用target_compile_options()并定义哪个target_compile_definitions()。然而,我现在有一个问题,这些标志也被传递给汇编程序调用。有没有办法对汇编程序调用使用单独的汇编程序标志?

代码语言:javascript
复制
[ 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无法处理定义。有没有可能专门在汇编编译过程中删除它们?我还尝试设置特定于源代码的标志,但这似乎不起作用,目标编译选项/定义似乎具有优先级。

仁慈地问候罗宾

EN

回答 1

Stack Overflow用户

发布于 2020-12-21 03:45:27

我设法解决了这个问题,方法是使用arm-none-eabi-gcc编译器,并将带有cpp选项的-x汇编程序作为CMAKE_ASM_COMPILER,让GCC在汇编之前通过C预处理器运行它。为此,我使用了生成器表达式:

代码语言:javascript
复制
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时,带有#的行可能会被视为注释。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65371607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档