假设我有:
sdk.h:
#define foo 1
#define bar 1
应用程序.h:
#define foo 0
鉴于我希望 app.h 重新定义 sdk.h 中已定义的任何内容,如何生成如下所示的 merged.h:
#define foo 0
#define bar 1
一种方法可能是“不要这样做,让预处理器为您做”。我已经尝试过了,但我认为这对我的情况不起作用。我真的在寻找一种使用基本 shell 脚本的方法。
答案1
如果头文件中内容的顺序不重要,您可以执行以下操作:
$ awk '/#define/{a[$2]=$3; next}1;END{for(i in a){print "#define",i,a[i]}}' sdk.h app.h
#define foo 0
#define bar 1
请注意,任何不包含的行将#define
首先打印。