【问题标题】:add_definitions vs. configure_fileadd_definitions 与 configure_file
【发布时间】:2010-09-23 18:01:20
【问题描述】:

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

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

  1. 使用这些预处理器定义创建一个模板文件,在 CMakeLists 中将其传递给 configure_file(),最后在每个源文件中#include 生成的配置文件
  2. 在 CMakeLists 中直接使用 add_definitions(-DLIB_DEFINED)。

第一种方法对我来说似乎更复杂,那么采用它而不是第二种方法有什么好处(例如,避免一些可移植性问题)?

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 谢谢你和 fschmitt - 现在我觉得第一种方法总体上更干净,所以我会使用它。
      猜你喜欢
      • 2015-12-20
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-16
      • 1970-01-01
      相关资源
      最近更新 更多