Re: [質問] C言語のヘッダからdefine名とその設定値を出力するには?
とりあえず、
At Mon, 16 Oct 2006 00:31:15 +0900,
Takahiro Yamaguchi wrote:
[...]
>
> 今は、ヘッダファイル内で設定されている define名 を抽出するために、以下
> の手順で shell script を組んでいます。
>
> 1. ヘッダファイルから define を grep する。
> 2. 1.の出力から define名 を取り出すために、awk で grep の次のワードを
> 取り出し出力。
> (define /* */ SW のようにされているとdefine名を取り出せないが、その
> よう書式はないと仮定)
> 3. 2.の出力をから uniq -d で重複している define を出力。
> 4. 2.の出力と 3. の重複している define名を取り除きユニークなdefine名の
> みにする。
> (自作コマンドにて対処。)
> 5. header を hoge.c に include し gcc -P -E -dN $CCDEFINES hoge.c でプ
> リプロセッサにかけて出力。
gcc -P -E -dD $CCDEFINES hoge.c
-dNから-dDに変更
-dDにすると、#define TIME_A 100 と出力されるのが分かったので、
> 6. 4. の各行の define名を1つづつ 5.の出力にあるかを grep で確認。
に追加で、
7. 5.の出力にあった場合、awkを使用し第3フィールド以降も出力する。
line=`grep -w 4.の各行のdefine名 5.の出力ファイル | head -1` >> /dev/null
grep -w 4.の各行のdefine名 5.の出力ファイル >> /dev/null
# 上の行のコマンド2回同じ事をしているのがださい!
if [ $? -eq 0 ]; then
echo $line |\
awk '{
printf("*,%s,",$2)
printf(" ")
for (i = 3; i <= NF; i++) {
printf("%s ",$i)
}
printf(" ")
printf("\n")
}'
else
...
fi
で、
*,SW_A,
*,TIME_A, 100
(* は defineが設定されているという意味で出力しています。)
で、何とか私のプロジェクトでは事足りるようになりました。
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735