【发布时间】:2013-08-27 18:37:15
【问题描述】:
我正在使用一个专有的开发环境来编译用 C 以及 IEC 61131 语言编写的代码。对于 C 编译,它使用具有以下构建选项的 GCC 4.1.2:
-fPIC -O0 -g -nostartfiles -Wall -trigraphs -fno-asm
编译是由运行在使用 Cygwin 的 Windows 上的程序完成的。
我的问题是,IEC 语言预处理器不是很有用(根本不支持#define),我想使用宏!我不明白为什么 GCC 预处理器会真正关心它正在处理的语言(我的目标语言是结构化文本),所以我想看看是否有人知道如何让它处理不同文件类型的文件然后不会进一步编译(我只是在文件通过 IEC 编译器运行之前寻找宏扩展)。我对编译器选项和环境一无所知,因为我从来不需要处理它们,我只是编写 C 代码,它会神奇地编译并转移到我的目标系统运行。
我唯一能做的就是添加构建选项并在执行任何操作之前执行一个批处理文件。我认为我最大的希望在于使用批处理文件来处理某个扩展名的所有文件,但我什至不知道要使用 gnuinst 文件夹中的哪个可执行文件,更不用说使用什么标志来运行文件了。
【问题讨论】:
-
GCC preprocessor 的可能重复项 - 谈论 C,但这大多无关紧要。只需在您想要的任何源文本上使用
-E标志。 -
我试过
gcc -E TestIn.txt -o TestOut.txt并得到消息:链接器输入文件未使用,因为链接未完成。 TestIn.txt 的内容是:#define ADDTHEM(x,y) ((x)+(y)) Test= ADDTHEM(2,3);。我正在尝试获取包含以下内容的输出文件:Test= ((2)+(3)); -
GCC 有有趣的启发式方法,可以根据扩展名确定您要输入的文件类型,显然
.txt是链接器指令...只要告诉它是 C:gcc -xc -E TestIn.txt。跨度> -
嗯,这给出了
_spawnvp: no such file or directory,但我认为这是因为我是在 Windows 命令提示符下执行此操作的,而编译器不在我的 PATH 中。 -
@Mat: 或
gcc -E - < TestOut.txt
标签: c batch-file gcc cygwin c-preprocessor