我需要有条件地编译代码的几个部分,具体取决于系统中是否存在某些库。它们的存在是在CMake配置阶段确定的,我计划使用预处理器定义(如#ifdef(LIB_DEFINED)... #endif)告诉编译器结果。
我知道如何在CMake中实现这两种可能性:
第一种方法对我来说似乎更复杂,那么取代第二种方法有什么好处(例如避免一些可移植性问题)?
答案 0 :(得分:1)
根据您使用的库量,如果遵循第二种方法,编译器的调用将变大。所以我想对于较小的项目,只有2-3个可选库遵循方法2,但如果它更像是10左右,最好遵循方法1,以便编译输出保持可读性。
答案 1 :(得分:1)
方法1通常更可取,因为您还可以将该文件安装为已配置的标头,允许使用/链接到您的代码的其他项目使用相同的设置。还可以检查文件并查看项目的配置方式。这两种方法都可行,偶尔add_definitions是更好的方法(一个或几个定义,在初始编译后保留这些定义没有优势)。