编译时如何禁用部分代码

Lar*_*sen 8 c++

场景如下,我有10多个不同的项目,都使用日志记录框架,并且对于台式机系统和研究项目,日志记录框架实际记录日志是一个要求。但是,我们希望在嵌入式设备中部署相同的代码而不进行日志记录,因为这是不必要的,并且确实会影响性能(许多日志语句)。

我该如何说针对桌面编译=启用日志记录或针对嵌入式编译=禁用日志记录?

我已经看过了,ifdef但不确定那是最好的方法

我使用waf作为构建系统,如果有帮助,我们使用C ++ 17。

Seb*_*edl 12

您有两个选择:预处理器和源选择。

预处理器#ifdef通常是,通常通过根据平台在不同的变体中定义宏来实现,如下所示:

#if defined(EMBEDDED)
#  define LOG(msg)
#else
#  define LOG(msg) log(msg)
#endif
Run Code Online (Sandbox Code Playgroud)

然后使用宏记录事物:

LOG("I'm here");
Run Code Online (Sandbox Code Playgroud)

宏当然可以更复杂。


从根本上来说,源选择意味着您用具有相同接口但不执行任何操作的替代项替换日志记录库。

源选择更易于管理,使用起来也更简洁,但不够灵活或彻底。为了真正减小可执行文件的大小,您可能希望采用预处理器的方式。