在静态库中使用 #ifdef(C++,Eclipse CDT)
Using #ifdef in static libraries (C++, Eclipse CDT)
我有一个关于我在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 库添加为源位置?还是有别的办法?
此致敬意
有很多方法可以实现您想要的功能,但需要注意的一点是,如果两个MCU的驱动程序具有相同的接口(根据您的问题(,那么基于不同的MCU #defines 包含不同的标头是绝对没有意义的。如果您希望解决方案基于 #define,例如可以执行以下操作:
页眉 (some_driver.h(:
// init.
void some_driver_init(struct init_params ip);
// start driver
void some_driver_start();
"假"实现(some_driver.c(:
#if defined(ARM_CORTEX_M3)
#include "some_driver_arm_m3.c"
#elif defined(TI_MSP430)
#include "some_driver_msp430.c"
#elif defined(...)
//... and so on...
#else
#pragma warning "MCU NOT SUPPORTED!"
#endif
然后为每个MCU提供"真实"实现:
some_driver_arm_m3.c
// init. M3 Cortex driver
void some_driver_init(struct init_params ip)
{
// actual M3 implementation goes here
}
// start M3 Cortex driver
void some_driver_start()
{
// actual M3 implementation goes here
}
some_driver_msp430.c
// init. MSP430 driver
void some_driver_init(struct init_params ip)
{
// actual MSP430 implementation goes here
}
// start MSP430 driver
void some_driver_start()
{
// actual MSP430 implementation goes here
}
。等等。
- 无法在Ubuntu上将共享库与Eclipse链接
- Eclipse CDT:单个项目中有多个C++文件
- C++ 运行时链接器错误 (liblog4cpp.so.5) Eclipse
- Eclipse/Netbeans 中的处理模式行
- 如何在使用 SDL2 的 Eclipse 中构建 c++ 程序
- 使用 Eclipse CDT 进行 Cplex 配置
- Eclipse 没有在 Windows (C++) 中编译.exe
- 在 Eclipse 上启用 C++17 以使用 'std::byte'
- Eclipse CDT clang 工具链 - 无法从链接器选项中删除 stdlibc++,但可以添加 libc++,E
- 在 Eclipse 中添加库的工作方式是否与在 Visual Studio 中相同?
- 将编译器开关添加到 Eclipse CDT 内置编译器设置生成?
- 在 Eclipse: "error: no match for 'operator='" 中获取错误消息
- 在 eclipse 中,将宏重定义视为错误而不是警告
- Eclipse C++ 字符串作为函数参数
- 如何在 Eclipse 中一次从多个源文件进行构建
- Eclipse 可执行架构类型
- 如何摆脱导入的 make 项目中的 Eclipse 索引器"Type std::... could not be resolved"错误
- C++ 在编译过程中 strtok 函数 Eclipse 说没有在范围内声明?
- Eclipse/CDT_C++给出"语义错误_"类型XXX无法解决"。项目运行
- ROS/C++:无法在 eclipse 中修复未解析的包含