【问题标题】:CMake Code removalCMake 代码删除
【发布时间】:2018-01-28 18:02:57
【问题描述】:

为了以源代码向客户交付软件,我想删除封装在 #ifdef#ifdef#else 部分)中的代码。我想在通过目标属性调用 CMake 的 install() 期间执行此操作。使用get_target_property(),我可以获得已启用定义的列表,但我无法通过add_target_definition()set_target_property()undef'ed 宏添加到该列表中,这些宏稍后将从.c 文件中删除。我可以想象这种情况有可用的解决方案,但我无法在 SO 和 Google 上找到答案。

  • 如何为任何install() 机制提供启用和禁用定义的列表?
  • 从任何目标.c 文件中删除禁用代码行的最佳方法是什么?

非常感谢任何帮助。

亲切的问候, 弗洛斯特罗特

【问题讨论】:

  • 为什么?你想通过这个解决什么问题?如果客户尝试使用源代码时定义的宏不一样怎么办?
  • 作为一个可能的解决方案,为什么不简单地向客户展示预处理代码呢?或者提出一种不强制您删除或预处理文件的设计,例如将代码拆分为更多文件,而不是将文件分发给不应拥有这些文件的客户?

标签: cmake


【解决方案1】:

我怀疑过滤掉你提到的这些东西是否是正确的方法。我会使用特定的 Git 分支并在常规基础上重新设置它们的基础。

使用 CMake,您将很难做到这一点。它没有提供任何工具来操作 C 源代码。您可以生成一些标题,但基本上就是这样。

如果您坚持过滤,请使用 Perl 或 Python。

【讨论】:

  • 我坚持过滤,但是我可以使用cmakes关于活动代码和非活动代码的知识来用python过滤c代码吗?
  • CMake 不了解(非)活动代码。它只是编写一个预处理器宏列表并向 is 添加值。解析这个列表是一项简单的任务。难点在于解析和过滤 C 代码。提示:如果做得好,过滤是一项主要任务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 2011-04-12
  • 2017-02-12
  • 2011-08-26
  • 2012-11-18
相关资源
最近更新 更多