繁体   English   中英

如何在C ++中分别编译源代码

[英]How to compile source code separately in c++

我希望有人能帮助我解决过去两周来我一直在努力解决的这一基本问题。

我有一个包含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的内置编译,我想就如何解决此问题向社区寻求建议。 (我可以使用“构建解决方案”构建20套exe和dll)。

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

  1. 创建一个新项目,将其编译到静态库中。 在该项目中,为所有20个功能创建单独的源cpp文件。 (仅出于可维护性考虑,才拆分到更多源文件。)将logic.cpp拆分为20个单独的文件。 如果有通用代码部分,则可以创建更多源文件来包含这些部分。

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

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

那一些手工呢? 为您的方案引入一些定义,或使用一些标准的定义(例如“ _ISDLL”)并将情况包括在内:-)在“ #ifdefs”中无法到达这些情况

#ifdef _ISDLL
case x:

    break;
#endif

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM