我很好奇在构建程序或将其记录到基于Visual Studio或Eclipse的IDE上时如何将特定于编译的信息打印为构建日志的一部分。以下是一些清楚的背景。
我为C / C ++语言的微控制器开发固件。作为内部测试或客户端请求的一部分,固件可能启用或禁用了某些功能。如果需要多个固件文件,则很难跟踪哪个固件具有启用/禁用的功能。另一方面,如果原型固件中包含一个超出范围的参数,则在必须禁用该参数的情况下,它可能会保持启用状态。
为了解决这个问题,我正在考虑寻找一种方法,该方法可能会在构建输出中打印出必要的信息,如下所示:
DEBUG ENABLED
DEVICE ID 123
FEATURE1 DISABLED
FEATURE2 ENABLED
FEATURE3 ENABLED
这有点类似于#error
指令在不包含标头,不包含在另一个标头之前等引发致命错误的方式,只是它不会停止构建过程。理想情况下,此信息也将被打印在日志文件中,并且每个版本都将被保存在带有调试或发行版下新时间戳的新目录中,但是我不确定是否可以在任何编译器或IDE上使用(也许我把我的运气推得太远)。
可以对这样的功能进行编码吗?有IDE支持吗?
编辑:πάνταῥεῖ指向this question,它与之类似,除了在我的情况下,我需要传递2个参数,并且宏需要如下所示:
// Inside the code
BUILD_NOTE("DEBUG", debug_stat);
进而,这将需要将BUILD_NOTE定义为
#define BUILD_NOTE(msg, stat) #pragma message(msg": "#stat) // cannot place a directive inside a macro expansion
但是,根据this answer,预处理器指令不能放在宏扩展中。