【发布时间】:2015-12-15 16:43:00
【问题描述】:
我有一个恰好存储在 Bazaar 存储库中的 C++ 项目。该项目还使用#define'd 字符串来显示其版本号。有人刚刚问我们是否可以简单地将这个显示的版本号与 bzr repo 修订号联系起来。
所以,在伪 C、伪 bash 中,类似于:
#define VERSION_STRING "revision $(bzr revno)"
//...
cout << "Starting " << VERSION_STRING;
差不多吧。你会如何回答这个问题? makefile 是否运行脚本将该命令的输出插入到适当的源文件中?有对此的宏观解决方案吗?等等?
我对任何和所有聪明的解决方案都持开放态度,因为我在这个问题上画了一个受过教育的空白。 =D
【问题讨论】:
-
您可以使用
-D编译器标志为 g++ 和 clang++ 定义宏:g++ -DVERSION_STRING="revision $(bzr revno)" file.cpp -c -o file.o -
啊,完美。这会优先于在同名源中定义的宏吗?我问的原因是因为我认为我应该包含一个
#define VERISON_STRING "000",以防在调用g++时内联bash 失败。 -
扩展为完整答案。
-
这对你有用吗?
-
它做到了! ...但事实证明,该项目的结构使该解决方案不可行。唉。但是你肯定回答了,所以你肯定会得到分数。 =)
标签: c++ linux bash makefile bazaar