我有三个密切相关的应用程序,它们是从相同的源代码构建的 - 比方说APP_A,APP_B和APP_C.APP_C是APP_B的超集,APP_B又是APP_A的超集.
到目前为止,我一直在使用预处理器定义来指定正在构建的应用程序,它就像这样工作.
// File: app_defines.h
#define APP_A 0
#define APP_B 1
#define APP_C 2
Run Code Online (Sandbox Code Playgroud)
然后我的IDE构建选项指定(例如)
#define APPLICATION APP_B
Run Code Online (Sandbox Code Playgroud)
...在源代码中,我会有类似的东西
#include "app_defines.h"
#if APPLICATION >= APP_B
// extra features for APPB and APP_C
#endif
Run Code Online (Sandbox Code Playgroud)
然而,我今天早上在脚上射击并且浪费了很多时间,只需从一个文件中省略#include"app_defines.h"的行.一切编译得很好,但应用程序在启动时与AVs崩溃.
我想知道更好的处理方法是什么.以前,这通常是我认为#define可以使用的少数几次之一(无论如何都是在C++中),但我仍然很糟糕,并且编译器没有保护我.
c++ configuration-management c-preprocessor software-product-lines
这里有人实施了SEI定义的软件产品线方法吗?您如何管理变更?你如何测试?您必须处理哪些问题?
多年来,我们基本上一直在尝试遵循产品线方法,但我一直在与项目经理作斗争,他们不想为他们的程序严格要求的测试更改付费,但又想要免费的错误修复。他们还非常害怕他们不需要的代码库发生变化……这并不是不合理的恐惧。
最终我在上次 PDR 中获得了一个行动项目来解释产品线方法以及为什么我认为我们应该遵循它。我发现了softwareproductlines.com,它有一些成功的案例,但没有足够的细节来说明如何应对潜在的陷阱。
我正在为我的公司开发一个软件工具.我正在使用Visual Studio,C#并以.NET 4.0为目标.其中一个要求是软件将以三个版本(有限,标准和扩展)发布.我公司有几名实习生/实习生以及一些正式员工和经理.每个小组都将获得该软件的其他版本.实习生的限制版本,员工的标准版本和管理人员的扩展版本.Theese是给我的要求.而且,每个版本必须是一个可执行文件(没有dll文件).
因此,我创建了一个包含一组文件的项目,这些文件将被有条件地编译和构建.在主程序中,我可以使用指令#if和/或[Conditional]属性来根据当前配置仅实例化所需的类.
但是无论如何都要编译和构建当前不需要的文件.并且创建的可执行文件包含来自这些文件的所有代码,这些代码是不合需要的,并且不符合给我的要求.每个可执行文件应仅包含目标员工组所需的代码.(这是出于安全原因.)
所以我的问题是如何根据当前配置从编译过程中排除一组文件?