如何在编译时门功能?
How can I gate features at compile time?
我有一个正在开发的 C++ 应用程序。我想发布一个免费版本和一个付费版本,生产版本在现有免费版本的基础上添加功能。
根据版本类型编译功能的最佳方法是什么?理想情况下,我会向 CMake 传递一个标志,因此在构建二进制文件时,它还会包含我在生产版本中需要的任何代码。
您自己回答了您的问题 :) 将一个标志传递给您的编译器,并在您的代码门中使用以下功能:
#ifdef YOUR_FLAG
//your extra logic
#elif
//in case YOUR_FLAG is not defined
#endif
我在我开发的游戏中使用了完全相同的方法 - 在免费版本中启用了广告,在付费版本中代码被预处理器排除。
您还可以使用 运行-time 检查,以防它更适合某些特定任务,但正如问题评论中提到的那样 - 代码在那里并且篡改内存(翻转你的标志)将可能允许访问受限功能。
您将它们添加为许可插件。
即:
- 将代码分开。哎呀,您甚至可以将 "free" 代码许可为开源代码,同时仍然保留您的商业模式。
- 让他们 phone 回家或验证一些密钥,以便您知道该人已获得许可。
- 确保代码的其余部分可以在删除付费胆量的情况下继续使用。必要时安慰一下。
我有一个正在开发的 C++ 应用程序。我想发布一个免费版本和一个付费版本,生产版本在现有免费版本的基础上添加功能。
根据版本类型编译功能的最佳方法是什么?理想情况下,我会向 CMake 传递一个标志,因此在构建二进制文件时,它还会包含我在生产版本中需要的任何代码。
您自己回答了您的问题 :) 将一个标志传递给您的编译器,并在您的代码门中使用以下功能:
#ifdef YOUR_FLAG
//your extra logic
#elif
//in case YOUR_FLAG is not defined
#endif
我在我开发的游戏中使用了完全相同的方法 - 在免费版本中启用了广告,在付费版本中代码被预处理器排除。
您还可以使用 运行-time 检查,以防它更适合某些特定任务,但正如问题评论中提到的那样 - 代码在那里并且篡改内存(翻转你的标志)将可能允许访问受限功能。
您将它们添加为许可插件。
即:
- 将代码分开。哎呀,您甚至可以将 "free" 代码许可为开源代码,同时仍然保留您的商业模式。
- 让他们 phone 回家或验证一些密钥,以便您知道该人已获得许可。
- 确保代码的其余部分可以在删除付费胆量的情况下继续使用。必要时安慰一下。