将c#defines导出为shell变量

在我的项目中,系统的各种目录,文件和其他组件的许多路径作为#defines存储在filenames.h中,所有需要它们的文件都包含该文件.它适用于编译生成的所有各种二进制文件,但该项目还包括一些使用相同路径的
shell脚本.目前这意味着当路径发生变化时,我所要做的就是编辑filenames.h并重新编译以获取可执行文件集来理解新路径,但我必须手动编辑每个shell脚本.

所以问题是,如何将#defines变成shell变量,例如生成一些filenames.sh脚本,这些脚本将从其他脚本调用以初始化它们.例如:

#define TMP_PATH      "/ait/tmp/"
#define SYNCTMZFILE   TMP_PATH "sync_tmz"

会创造

TMP_PATH="/ait/tmp/"
SYNCTMZFILE="/ait/tmp/sync_tmz" 

当然可以编写一个创建它的C程序(甚至将它打印到stdout然后在shell中的反引号中执行它)但是我更喜欢一个更简单,更健壮的方法,比如写一半 – 穿过cpp的C半壳状物会产生正确的输出,或类似的东西.

最佳答案 把它放在你的Makefile中:

filenames.sh: filenames.h
        awk '/^#define/{print;printf "_%s=%s\n",$2,$2}' $< \
        | cpp -P \
        | sed 's/^_//;s/" "//;' > $@
点赞