如何在编译时关闭功能?

时间:2015-02-05 13:19:27

标签: c++ cmake makefile

我有一个正在开发的C ++应用程序。我想发布一个免费版本和付费版本,生产版本在现有免费版本之上添加功能。

根据发布类型编译功能的最佳方法是什么?理想情况下,我会将标志传递给CMake,因此在构建二进制文件时,它还会包含我在生产版本中需要的任何代码。

2 个答案:

答案 0 :(得分:3)

你自己回答了你的问题:)将标志传递给你的编译器,并在你的代码中将功能传递给:

#ifdef YOUR_FLAG
//your extra logic
#elif
//in case YOUR_FLAG is not defined
#endif

我在我开发的游戏中使用了完全相同的方法 - 在免费版本广告中启用,在付费版本中,代码被预处理器排除。

此外,您可以使用运行时检查,以防它更适合某些特定任务,但正如在问题的评论中提到的那样 - 代码就在那里并且篡改内存(翻转您的标志)将有可能获得访问权限限制性特征。

答案 1 :(得分:0)

您将它们添加为许可插件。

那是:

  1. 保持代码分开。哎呀,你甚至可以免费获得"免费"代码作为开源,仍然保持您的业务模式。
  2. 让他们回家或验证一些密钥,以便您知道该人已获得许可。
  3. 确保其余代码可以使用已删除的付费内容。必要时舒适。