zoukankan      html  css  js  c++  java
  • 利用条件编译实现工程定制版本的自动输出

      项目开发代码管理中常常遇到这样的需求:根据不同的情况需要对工程代码进行不同的定制(如有时需要加入试用版期限限制,有时需要使用网络狗检测,有时又要改用单机狗检测),这些定制有时是可以通过代码在运行时实现的,但有些则必须在编译时确定。

      一种不好的维护方式是,程序员根据每次版本输出要求,进行一些临时的代码修改,再编译出版本。这样不仅代码维护困难,也造成版本混乱,难以有效控制。

      其实这个问题可以利用预处理宏进行条件编译来轻松解决,同时,利用VC的命令行进行编译,不需打开IDE环境,使得编译快速,结合批处理脚本又可以实现从代码更新(从代码服务器获取新版本)到编译再到安装包制作的自动化流水线。

      这里暂时不详述代码获取及安装包制作的方法,这些都只需参考使用的版本管理工具(如vss、svn)和安装包制作工具的命令行帮助手册即可。

      对于C++的宏和预处理指令相信大家都很了解,如#ifdef #endif 这样的预处理指令在C++代码中是很常见到的,它们的作用通常是根据宏定义或其他条件的不同进行有选择的编译,即条件编译。利用条件编译,可以轻松实现如是否在程序中加入对加密狗的检查的选择:

    #ifdef USE_NET_DOG
    if (!CheckNetDog())   
    return false;
    #endif

      有了这样的条件编译的代码,下一步就是宏的定义。宏定义通常在工程设置中进行,如VC中Project property->Configuration Properties->C/C++->Preprocesser->Preprocesser Definitions,在其中添加要定义的宏即可。

      为了不修改工程设置就可以执行不同的条件编译选择,可以为不同的版本输出需求创建不同的编译配置方案(默认的只有Debug和Release),如添加一个使用网络狗的编译配置方案ReleaseWithNetDog,选择从Release方案继承,然后在该方案中添加USE_NET_DOG宏定义。

      接下来就可以根据需要选择不同的编译配置方案编译输出了。使用命令行编译上面新建的配置方案的方法如下:

    devenv.exe MySolution.sln /rebuild ReleaseWithNetDog

      对于其他的输出定制需求,也可以用类似的方式实现对应的编译配置方案进行定制编译。一些情况下可能会需要根据实际情况动态指定一些信息,如时间限制版本的到期时间,这无法在编译配置方案中确定,必须在编译时通过命令行或其他方式输入(目前还需要再研究一下:),有清楚的朋友欢迎帮忙。

      在此基础之上,同时利用版本控制工具、安装包制作工具的命令行功能,实现一个集版本获取、工程编译和安装包制作于一体的批处理脚本,就可以实现这一工作的自动化了。

    PS: VC命令行选项说明参考:http://msdn.microsoft.com/en-us/library/xee0c8y7(v=VS.80)

  • 相关阅读:
    2015-3-27
    2015-3-26
    2015-3-25
    2015-3-24
    oracle数据字典表 系统表
    PowerDesigner教程系列(六)概念数据模型
    PowerDesigner教程系列(五)概念数据模型
    PowerDesigner教程系列(四)概念数据模型
    PowerDesigner教程系列(三)概念数据模型
    PowerDesigner教程系列(二)概念数据模型
  • 原文地址:https://www.cnblogs.com/indif/p/1925266.html
Copyright © 2011-2022 走看看