【发布时间】:2018-10-31 13:29:18
【问题描述】:
我有一个关于我在 Eclipse CDT 中的项目管理、在 C++ 中编程和使用 GCC 编译的问题。 假设我有一个适用于 A 型微控制器 (driverA.hpp) 的驱动程序库和一个适用于 B 型微控制器 (driverB.hpp) 的驱动程序库(外围设备等)。在这两个库中,函数接口是相同的。此外,我有某些设备的库,例如设备 X,它们应该可用于两种控制器类型(例如:deviceX.hpp)。在使用这些东西的项目(projectY)中,我将添加相应的驱动程序库(driverA.hpp 或 driverB.hpp),并且我想添加一个编译器标志以命名我要使用的控制器类型。
在deviceX.hpp中,我想区分这两种类型,所以我想添加这样的东西:
#ifdef CONTROLLER_A
#include driverA.hpp
#elseif CONTROLLER_B
#include driverB.hpp
#endif
这个库也将链接到 projectY,我想在其中添加一个编译器标志,如 CONTROLLER_A,并且将链接具有正确控制器类型的库 deviceX。
但是,我知道,这是行不通的。这就是为什么我要问你:做这种库依赖的最好(或:常见)方法是什么?将 deviceX 库添加为源位置?还是有别的办法?
最好的问候
【问题讨论】:
-
我可能会在构建系统中执行此操作。
-
是的,可能就是这样,但我对 Eclipse 中的 C++ 构建系统不够精通,无法知道如何做到这一点,并且在网上找不到好的答案,这就是为什么我我在这里问。
-
如果可能的话,我会简单地避免使用静态库——这也会产生更好的二进制文件。
-
如果我理解正确,您会建议将所需的驱动程序直接添加到源文件夹中吗?
-
调查 Eclipse 帮助系统中的构建配置。我已经十多年没有使用它了,但我记得他们确实为您提供了 UI 来设置单独的构建配置,这样 /DCONTROLLER_A 宏定义将在命令行上提供给编译器。
标签: c++ c eclipse linker microcontroller