add_definitions与configure_file

时间:2010-09-23 18:01:21

标签: c++ cmake

我需要有条件地编译代码的几个部分,具体取决于系统中是否存在某些库。它们的存在是在CMake配置阶段确定的,我计划使用预处理器定义(如#ifdef(LIB_DEFINED)... #endif)告诉编译器结果。

我知道如何在CMake中实现这两种可能性:

  1. 使用这些预处理器定义来保存模板文件,将其传递给CMakeLists到configure_file(),最后在每个源文件中#include生成的配置文件
  2. 在CMakeLists中直接使用add_definitions(-DLIB_DEFINED)。
  3. 第一种方法对我来说似乎更复杂,那么取代第二种方法有什么好处(例如避免一些可移植性问题)?

2 个答案:

答案 0 :(得分:1)

根据您使用的库量,如果遵循第二种方法,编译器的调用将变大。所以我想对于较小的项目,只有2-3个可选库遵循方法2,但如果它更像是10左右,最好遵循方法1,以便编译输出保持可读性。

答案 1 :(得分:1)

方法1通常更可取,因为您还可以将该文件安装为已配置的标头,允许使用/链接到您的代码的其他项目使用相同的设置。还可以检查文件并查看项目的配置方式。这两种方法都可行,偶尔add_definitions是更好的方法(一个或几个定义,在初始编译后保留这些定义没有优势)。