当前位置:  开发笔记 > 编程语言 > 正文

构建相同C/C++应用程序变体的最佳方法是什么

如何解决《构建相同C/C++应用程序变体的最佳方法是什么》经验,为你挑选了2个好方法。

我有三个密切相关的应用程序,它们是从相同的源代码构建的 - 比方说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

然后我的IDE构建选项指定(例如)

#define APPLICATION APP_B

...在源代码中,我会有类似的东西

#include "app_defines.h"

#if APPLICATION >= APP_B
// extra features for APPB and APP_C
#endif

然而,我今天早上在脚上射击并且浪费了很多时间,只需从一个文件中省略#include"app_defines.h"的行.一切编译得很好,但应用程序在启动时与AVs崩溃.

我想知道更好的处理方法是什么.以前,这通常是我认为#define可以使用的少数几次之一(无论如何都是在C++中),但我仍然很糟糕,并且编译器没有保护我.



1> plinth..:

您并不总是必须在共享公共代码库的应用程序中强制继承关系.真.

有一个旧的UNIX技巧,您可以根据argv [0]定制应用程序的行为,即应用程序名称.如果我没记错的话(我看了它已经20年了),rsh和rlogin是同一个命令.您只需根据argv [0]的值进行运行时配置.

如果您想坚持使用构建配置,那么这就是通常使用的模式.您的构建系统/ makefile将命令上的符号定义为APP_CONFIG为非零值,然后您有一个包含配置螺母和螺栓的公共包含文件.

#define APP_A 1
#define APP_B 2

#ifndef APP_CONFIG
#error "APP_CONFIG needs to be set
#endif

#if APP_CONFIG == APP_A
#define APP_CONFIG_DEFINED
// other defines
#endif

#if APP_CONFIG == APP_B
#define APP_CONFIG_DEFINED
// other defines
#endif

#ifndef APP_CONFIG_DEFINED
#error "Undefined configuration"
#endif

此模式强制配置是命令行定义且有效.



2> Jere.Jones..:

你想做的事情似乎与"产品线"非常相似.Carnigie Melon University在这里有一个很好的页面:http://www.sei.cmu.edu/productlines/

这基本上是一种构建具有不同功能的一个软件的不同版本的方法.如果您想象像Quicken Home/Pro/Business这样的东西,那么您就会走上正轨.

虽然这可能不是您尝试的,但这些技术应该会有所帮助.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有