2017-04-04 114 views
1

我已经编写了几个可以在.h文件(define.h)中激活的选项的代码。我希望我的代码的编译版本创建一个文件(例如define.dat),并在执行时写入定义的部分(以便跟踪我们使用或不使用的内容)。如何在makefile中使用 n(新行)使用bash脚本

到目前为止,我设法制作了一个sed脚本来转换我想呈现的格式的文件。

echo '"' `cat define.h | grep '#def' | grep -v '//#def' | sed 's;/.*$$;;' | sed 's/$$/ \\\n/'` '"' > define.dat 

而且我知道,与

const char *s = { 
#include "define.dat" 
}; 

我可以在编译时的代码来实现它。

第一个脚本是工作在bash的环境很好(请注意双$不是必需的),但是,当我把它在生成文件(我需要加倍$),\n被解释为换行符代替。因此,编译器会给出错误。

任何建议或新方法?

+1

MCVE请:http://stackoverflow.com/help/mcve和更多信息 – Yunnosch

+0

'猫| grep | grep | sed | sed'是七宗罪中的一个。 –

回答

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全部更换-