只想编译 if-else 中的 if 语句

Want to compile only if statement in if-else

我正在做一个项目,应该在 ros melodic (ubuntu 18.04) 和 ros noetic(ubuntu 20.04) 上 运行。所以在这样做的同时,我在我的代码中做了一个 if-else 语句,

if(distro=="noetic"){
    ...do this
else
    ...do this

问题基本就出现了,noetic和melodic支持不同版本的Point cloud Libraries(PCL),这也使得它们的初始化方式不同。因此,当我在 if 语句和 else 语句中放置 PCL 初始化(意念支持的方式)时,我放置了 melodic 初始化方式。我希望编译器(我使用的 catkin_make 命令)只编译 if 语句,但它也会编译 else 语句,这会给出错误,因为 noetic 不支持旋律初始化方式。应该怎么走?

使用预处理器宏。这需要在编译之前处理。预处理器宏 #ifdef#ifndef 将检查符号 table 中是否存在标记(检查 OS 的文档以查看是否有为它定义的标记),然后跳到相应的 if/else 部分。


#ifdef NOETIC_DISTRO
//Code for noetic distro
#endif
#ifdef OTHER_DISTRO
//Code for other distro
#endif