如何在makefile

时间:2017-04-04 17:06:50

标签: sed makefile compilation

我编写了一个代码,其中包含几个可以在.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} }被解释为换行符。因此,编译器会出错。

有任何建议或新方法吗?

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