Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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
Assembly 为汇编程序制作单独的标志_Assembly_Cmake_Arm_Cross Compiling - Fatal编程技术网

Assembly 为汇编程序制作单独的标志

Assembly 为汇编程序制作单独的标志,assembly,cmake,arm,cross-compiling,Assembly,Cmake,Arm,Cross Compiling,我正在尝试使用GCC交叉编译器为ARM目标交叉编译一个项目。我创建了一个目标,并使用target_compile_options()设置ABI标志(-mcpu,-mfpu等),并定义了哪个target_compile_definitions()。然而,我现在有一个问题,即这些标志也被传递给汇编程序调用。有没有一种方法可以为汇编器调用使用单独的汇编器标志 [ 65%] Building CXX object CMakeFiles/fsfw_example.dir/bsp_stm32/main.cp

我正在尝试使用GCC交叉编译器为ARM目标交叉编译一个项目。我创建了一个目标,并使用target_compile_options()设置ABI标志(-mcpu,-mfpu等),并定义了哪个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
[65%]构建CXX对象CMakeFiles/fsfw_example.dir/bsp_stm32/main.cpp.obj
arm-none-eabi-g++-DSTM32H743xx-DUSE_HAL_驱动程序
-Ibla\bla-g-specs=nosys.specs
-规格=纳米。规格-mcpu=皮质-m7-mfpu=fpv5-d16-mfloat abi=硬
-mthumb-功能部分-fdata部分
-std=gnu++11-o CMakeFiles\fsfw_example.dir\bsp_stm32\main.cpp.obj
-c:\Users\Robin\Documents\FSFW\FSFW\u example\bsp\u stm32\main.cpp
[66%]构建ASM对象cmakfiles/fsfw_example.dir/bsp_stm32/startup_stm32h743xx.s.obj
arm none eabi as-DSTM32H743xx-DUSE_HAL_驱动程序-Ibla\bla
-mcpu=皮质m7-mfpu=fpv5-d16-mfloat abi=硬的-mthumb-g-specs=nosys.specs
-规格=纳米。规格-mcpu=皮质-m7-mfpu=fpv5-d16-mfloat abi=硬-mthumb
-F函数节-fdata节-o CMakeFiles\fsfw_example.dir\bsp_stm32\startup_stm32h743xx.s.obj
-c:\Users\Robin\Documents\FSFW\FSFW\u example\bsp\u stm32\startup\u stm32h743xx.s
问题是:arm none eabi as无法处理定义。是否可以专门在汇编程序编译过程中删除它们? 我还尝试设置特定于源代码的标志,但这似乎不起作用,目标编译选项/定义似乎具有优先级

问候
Robin

我设法解决了这个问题,使用arm none eabi gcc编译器和带cpp选项的-x assembler作为CMAKE_ASM_编译器,让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}>
)
target\u compile\u选项(${target\u NAME}私有
$
$
$
)

使用
arm none eabi as
只能处理
.macro
等汇编指令,而不能处理
#define
等CPP指令(这需要CPP)。直接使用
as
,带有
#
的行可能会被视为注释。

您使用与编译器相同的标志调用汇编程序?CMake正在这样做。这是因为不知何故,我用target_…()添加的编译标志也被添加到了汇编程序调用中。
gcc-cfoo.S
将通过c预处理器运行asm(在将其作为
.S
提供给
之前),前提是文件名具有
.S
(大写字母S)扩展名,而不是小写的
.S
。如果您想覆盖它,可以使用yes
-x
,在本例中,使用cpp的
-x汇编程序。(不是
-x汇编程序,这已经是
.s
文件的默认设置)。使用
gcc-vfoo.S
查看它运行的内容。谢谢Peter,这澄清了很多:-)我根据需要修改了我的CMake文件编辑应该删除未来读者不应该使用的错误尝试,而不仅仅是添加更多“编辑:”或“更新:”的内容。只要把答案写进对未来读者最有帮助的地方就行了。这次我是为你做的。