我编写了一个代码,其中包含几个可以在.h
文件(define.h)中激活的选项。我希望我的代码的编译版本生成一个文件(例如define.dat),并在执行时将定义的部分写入其中(以跟踪我们使用或不使用的内容)。
到目前为止,我设法创建了一个sed
脚本,以我想要呈现的格式转换文件。
echo '"' `cat define.h | grep '#def' | grep -v '//#def' | sed 's;/.*$$;;' | sed 's/$$/ \\\n/'` '"' > define.dat
我用
学到了这一点const char *s = {
#include "define.dat"
};
我可以在编译时在代码中实现它。
第一个脚本在Bash环境中工作正常(请注意不需要双$
),但是,当我把它放在makefile中时(我需要双$
),{{1} }被解释为换行符。因此,编译器会出错。
有任何建议或新方法吗?
答案 0 :(得分:0)
我发现了一个小作品,然而,对它不满意。我使用-
作为分隔符
echo '"' `cat define.h | grep '#def' | grep -v '//#def' | sed 's;/.*$$;;' | sed 's/$$/ - /'` '"' > define.dat
而不是
const char *s = {
#include "define.dat"
};
我用过
char s[] = {
#include "define.dat"
};
for (i=0 ; s[i] ; i++)
if (s[i] == '-')
s[i] = '\n';
if ((fout = fopen("define.dat","w")) == NULL)
fprintf(stderr,"Error in creating define.dat\n");
else
{
fprintf(fout,s);
fclose(fout);
}
将所有-
替换为\n
。