有没有办法部分预处理C或者C++源文件?我所说的“部分预处理”是指扩展一些但不是全部的 #include 指令。例如,我想扩展 #includes 指向我的项目标头,但不扩展 #includes 指向其他库的标头。
我尝试通过运行来做到这一点gcc -E
仅与-I
我的项目标题的标志,而不是-I
库的标志,但这不起作用,因为 gcc 在遇到无法扩展的 #include 时会给出错误。
EDIT:我并不真正关心预处理器在宏扩展方面的行为。
C 预处理器不够智能,无法自行完成此操作。如果你只感兴趣#include
,您应该使用自己的工具(例如 Perl)来处理源文件,扩展#include
您感兴趣的行而忽略其余的行。
该脚本在无趣的标题行前加上前缀// Ignored
:
#!/usr/bin/perl
use warnings;
use strict;
my @uninteresting = qw(iostream vector map);
my $uninteresting = join '|', @uninteresting;
while (<>) {
s%(#include <(?:$uninteresting)>)%// Ignored $1%;
print;
}
现在你可以这样做:
cat sourcefile.cpp | perl ignore-meh.pl | g++ -E
如果你想变得非常奇特:
#!/usr/bin/perl
use warnings;
use strict;
while (<>) {
s%// Ignored (#include <[^>]+>)%$1%;
print;
}
现在你可以这样做:
cat sourcefile.cpp | perl ignore-meh.pl | g++ -E | perl restore-meh.pl
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)