在集成开发环境中创建了一个项目1,项目1中有编译预处理程序,能根据不同用户的要求,生成对应的程序,麻烦的是每次需要修改编译预处理程序的代码.举例代码如下:
#define DISP 0void CDepenceDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
       int x;
       x = 123456789;//该处代码为核心代码 #if DISP==0  
MessageBox("显示0", "提示",MB_ICONINFORMATION); 
#elif DISP==1 
MessageBox("显示1", "提示",MB_ICONINFORMATION);  
#elif DISP==2 
MessageBox("显示2", "提示",MB_ICONINFORMATION);  
#endif 

}如果用户需要显示0,我将DISP的定义修改为0,然后编译工程,将生成的应用程序交给用户.
如果用户需要显示1,我将DISP的定义修改为1,然后编译工程,将生成的应用程序交给用户.
如果用户需要显示2,我将DISP的定义修改为2,然后编译工程,将生成的应用程序交给用户.
需要,做三次修改.如果将工程复制3分,让项目0的DISP的定义为0,项目1的DISP的定义为1,项目2的DISP的定义为2,这样当用户需要时,就不需要修改编译预处理的代码,仅仅只需要编译对应的工程就可以了,并且还有一个好处就是,可以在集成开发环境中使用rebuild all,同时编译3个工程.但是这样带来一个问题,当核心代码修改时(上面的兰色标明处),需要修改三处, 也和使用编译预处理的目的冲突.有没有什么办法做到,将代码都全部写好,根据用户的要求,选择生成对应的应用程序.当核心代码发现错误,只修改一处就可以?

解决方案 »

  1.   

    不用预编译就是了,直接定义一个DISP的变量,变量值从一个文件中或注册表中动态读取
    根据DISP的值用if else或switch分支显示某一条信息。给不同用户发送程序时,只需要配送不同的参数文件或者在不同的安装程序里给注册表值写入不同的内容void CDepenceDlg::OnButton1() 

    // TODO: Add your control notification handler code here 
          int x; 
          x = 123456789;//该处代码为核心代码        int DISP=0;
          CFile ff;
          //读取文件内容,给DISP赋值
    if (DISP==0)
    MessageBox("显示0", "提示",MB_ICONINFORMATION); 
    else if (DISP==1)
    MessageBox("显示1", "提示",MB_ICONINFORMATION);  
    else if (DISP==2)
    MessageBox("显示2", "提示",MB_ICONINFORMATION);  

      

  2.   

    有两种办法
    一种是建三个工程,这三个工程共用相同的文件,当然就只要改一个地方就行了。DISP的定义不放在预处理文件中,而是在Options中定义。
    第二种是同一个工程,在Debug和Release的基础上新建不同的build。同样在Option中定义DISP。
      

  3.   

    用版本控制工具吧,比如SVN
    生成不同的版本树就可以了,不同版本树之间可以切换、提交,最后也能提交到主版本中
      

  4.   


    这2种方法都很好.lights_joy 能否具体的说说如何实现? Option 在什么地方可以找到 
      

  5.   

    这三个工程共用相同的文件, 这个如何实现呢?DISP的定义不放在预处理文件中,而是在Options中定义。  Option 在什么地方?
      

  6.   

    自己编写批处理命令是否可以解决呢?
    例如:
    msdev   project.dsp   /MAKE   "project   -   Win32   Release"   /REBUILD但是,如果你不用集成环境,自己手动编写设计,由于CL很多参数,十分麻烦.该怎么办呢?
      

  7.   

    用宏隔开代码
    新建三个编译工程选项的 定义不同的宏。
    例如默认的release和debug然后用msbuild,可以将所有的工程都编译出来的
      

  8.   

    很久没用VC6了,好像是project -> settings,里面有一个C/C++预处理的选项。
      

  9.   

    共用文件很简单啊,就是建立工程后把这些文件添加到工程中就行了,add files....