根据我的主可执行文件的构建类型(调试、发布),我想链接我的 DLL 的匹配构建。使用 C++Builder IDE 完成此操作的正确方法是什么?
详细信息:我正在使用 Embarcadero C++Builder XE8(试用版,BCC64)。我的软件由一个可执行文件和多个在程序启动期间(而不是运行时)加载的库(.dll, Dynamic-link Library )组成。每个库和可执行文件都有自己的项目,并且所有项目都在同一个项目组中。
为了在使用项目中使用编译的库,我添加了 import files of the compiled DLLs (.a 对于 BCC64)到消费项目。
摘自 SerialPort.cbproj:
<LibFiles Include="..\..\Win64\Debug\Logger.a" Condition="'$(Platform)'=='Win64'">
<BuildOrder>3</BuildOrder>
<IgnorePath>true</IgnorePath>
</LibFiles>
不幸的是,.dll/.a 文件的输出路径取决于变量 $(Platform) 和 $(Config),因此这些文件的路径在调试版本和发布版本之间有所不同。 IDE 不允许我指定不同的 DLL 文件用于调试和发布版本。
我宁愿不诉诸丑陋的黑客,比如将生成的用于调试和 Release模式的二进制文件放在同一个文件夹中,只是为了两个构建的导入文件有一个路径。 以下解决方法似乎有效,但在保存项目时被 C++Builder 覆盖:
<LibFiles Include="..\..\Win64\Debug\Logger.a" Condition="('$(Platform)'=='Win64') And ('$(Config)'=='Debug')">
<BuildOrder>3</BuildOrder>
<IgnorePath>true</IgnorePath>
</LibFiles>
<LibFiles Include="..\..\Win64\Release\Logger.a" Condition="('$(Platform)'=='Win64') And ('$(Config)'=='Release')">
<BuildOrder>3</BuildOrder>
<IgnorePath>true</IgnorePath>
</LibFiles>
有没有一个合理的方法来解决这个问题?
最佳答案
正如评论中提到的,一种可能的解决方案是:
您可以在源文件之一中使用 #pragma link
指令来链接它们,而不是将 lib/a 文件添加到项目中。您可以使用 #ifdef
指令包围它,以控制在哪些条件下链接哪些文件,您可以在项目选项中定义这些条件。
类似于:
#ifdef DEBUG
#pragma link "mydebulib.a"
#else
#pragma link "myreleaselib.a"
#endif
关于c++ - 内河码头 C++Builder : Separate debug/release DLL references possible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30738245/