无法在C中包含ASM头文件而不会丢失预处理器

时间:2017-11-28 13:11:17

标签: c gcc assembly c-preprocessor inline-assembly

简短版本:

我希望能够在macros.S中定义汇编程序宏,并在GNU C中的asm()语句中使用它们。

我可以使用靠近我的C源顶部的asm(".include \"macros.S\"");执行此操作,但我希望macros.S通过C预处理器。

长版:

在GCC asm中,*.S文件由C预处理器预处理,允许使用C样式#define等。

在GCC C中,您可以通过在文件顶部附近写.set来包含asm头文件(可能包括asm宏定义,asm(".include \"myasmheader.S\"");声明等)。

以这种方式包含ASM头文件允许您在asm块中使用asm宏。

不幸的是,这样做不会在包含的.S文件上调用C预处理器(因为.include在编译过程中稍后完成),因此#define是没有的更长的替代。

那么有没有办法在C文件中正确包含.S文件?

其他一些编译器支持:

#asm
#include "myasmheader.S"
#endasm

哪个不会出现这样的问题。但是,GCC似乎要求C文件中的所有asm都是字符串形式。

如果没有使用asm(不是选项,非常混合asm和c的嵌入式DSP项目),或者在ASM文件中删除C预处理器的使用,可以做些什么?

1 个答案:

答案 0 :(得分:1)

来自评论:

将ASM文件的预处理(通过cpp)作为一个独特的构建步骤添加到您正在使用的任何构建系统中。

arrowdPed7g