如何在c ++中单独编译源代码

时间:2014-12-15 10:54:59

标签: c++ visual-studio-2010 compilation

我希望有人可以帮助我解决过去两周我一直试图解决的这个根本问题。

我有一个包含4个项目的解决方案,项目文件所依赖的一些库。在这些项目的每个项目中,都包含了一个logic.cpp文件的副本,它包含一长串逻辑列表,伪代码如下所示:

BOOL myLogic(){

 if(...)
 {
   switch(...)
   {
   case 1:
      doA();
      break;

   case 2:
      doB();
      break;

   ...
   case 20:
      doSomething();
      break;
  } 
 }
}

对于项目#1,它会生成该工具的exe。对于项目#2,它生成我正在构建的工具的dll版本以及其他2个项目,它们充当我的工具的实用程序文件。如果你注意到有20个逻辑可以遇到的情况并且它非常庞大。

所以,我现在的问题是所有这些源代码都被编译到我的单个exe或dll中,即使在某些情况下部署时甚至可能无法达到某些情况。我想要实现的是打破这个开关案例并编译20个不同的exe和dll集。所以

1)应用程序占用空间较小。   2)逆向工程可以在一定程度上保护源。

因此,如果我还想继续使用Visual Studio的内置编译,我想向社群寻求如何解决此问题的建议。 (我可以使用" Build Solution&#34构建20套exe和dll;)。

谢谢,我感谢任何建议。如果我的问题不够清楚,请随时澄清一下。

2 个答案:

答案 0 :(得分:3)

  1. 创建一个新项目,编译成静态库。在该项目中,为所有20个功能创建单独的源cpp文件。 (拆分更多源文件只是为了维护性。)将logic.cpp拆分为20个单独的文件。如果存在公共代码部分,则可以创建更多源文件以包含这些部分。

  2. 现在创建2x20个新项目:20个exe项目和20个dll项目。这些项目中的每一个都依赖于在步骤1中创建的静态库项目,并且所有这些项目都只是一个简单的存根,用于从公共库中调用其中一个功能。

  3. 构建解决方案时,每个功能都有20个不同命名的可执行文件和20个不同名称的dll。如果在链接器中打开了死代码消除,则所有exes / dll都不会包含特定函数不需要的代码。

答案 1 :(得分:1)

一些手工怎么样? 为您的场景生成一些定义或使用一些标准的定义,如“_ISDLL” 并且包装案例:-)你知道它们不能在“#ifdefs”

中到达
#ifdef _ISDLL
case x:

    break;
#endif