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

Man*_*nia 7 c assembly gcc inline-assembly c-preprocessor

精简版:

我希望能够在a中定义汇编程序宏,macros.Sasm()在GNU C中的内部语句中使用它们.

我可以asm(".include \"macros.S\"");在我的C源头附近做到这一点,但我想macros.S通过C预处理器.


长版:

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

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

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

不幸的是,这样做不会.S在包含的文件上调用C预处理器(正如.include稍后在编译过程中所做的那样),因此#defines不再被替换.

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

其他一些编译器支持:

#asm
#include "myasmheader.S"
#endasm
Run Code Online (Sandbox Code Playgroud)

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

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

ARa*_*piK 2

来自评论:

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

感谢arrowedPed7g