2017-04-04 30 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全部更換-