如何在条件汇编期间将标志传递给预处理器

时间:2011-04-18 10:22:00

标签: gcc gas c-preprocessor

我想将Makefile中定义的某些宏传递给下面代码中的“_DBGR_ON_”之类的预处理器,以便相应地汇编代码。此选项在diab编译器(c交叉编译器for powerpc)中工作,方法是在makefile中使用-D_DBGR_ON_定义它并将其包含为Assembler标志。 但是如何将它包含在GCC中。

当我这样做时(ASFLAGS = -mregnames -D_DBGR_ON_。),我收到错误:无法识别的选项`-_DBGR_ON _'

然后,我尝试了ASFLAGS = -mregnames -D _DBGR_ON_,我得到了“无法打开_DBGR_ON_进行阅读:没有这样的文件或目录”

请帮助GCC中忽略-D选项。

我使用-D选项在Diab中执行条件汇编编译。如何在GCC中做到这一点。我被困在这里。

此致 Thulasi

startup.s文件的内容......

    .globl      _start
_start:
.ifndef _DBGR_ON_   # Flash mode   
   mfmsr        r3
   ori        r3,r3,0x1040              # Set ME/IP flags
   mtmsr        r3
   sync
.else  
   mfmsr        r3
   ori        r3,r3,0x1000                # Set ME/IP flags
   mtmsr        r3
   sync
.endif #_DBGR_ON_

......等等..

1 个答案:

答案 0 :(得分:0)

我认为这比GCC或C预处理器更像是一个gas问题。 gas本身不进行预处理(尽管可以通过gcc运行以首先调用C预处理器)。 .ifndef是一个gas指令,它在汇编程序文件中定义的符号级别工作 - 而不是C预处理程序指令(#ifndef)。

在这种情况下:ASFLAGS中您需要的是--defsym _DBGR_ON_=1