2017-04-04 11 views
1

.hファイル(define.h)で有効にできるいくつかのオプション付きのコードを書いています。私はコンパイルされたバージョンのコードでファイル(例えばdefine.dat)を作成し、実行時に定義された部分を書き込んで(私たちが使ったものかどうかを追跡する)。メイクファイルで 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" 
}; 

と私は、コンパイル時にコードでそれを実装できることを学びました。最初のスクリプトは(ダブル$は必須ではありません何卒ご了承下さい)バッシュ環境で正常に動作している

私は(私はダブル$を必要な場所)メイクファイルに入れたときに、しかし、\nではなく改行として解釈されます。したがって、コンパイラはエラーを出します。

提案や新しい方法はありますか?

+1

MCVEお願いします:http://stackoverflow.com/help/mcve詳細情報(http://stackoverflow.com/help/how-to-ask) – Yunnosch

+0

'cat | grep | grep | grep grep | grep | grep | sedは7つの致命的な罪の一つです。 –

答えて

0

私はそれに満足していない小さな作品を見つけました。私は\nですべて-を交換する

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); 
} 

を使用する区切り

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

、代わりの

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

として-を使用しました。

関連する問題