c++ - 在静态库(C++、Eclipse CDT)中使用#ifdef

标签 c++ c eclipse linker microcontroller

我有一个关于我在 Eclipse CDT 中的项目管理、C++ 编程和使用 GCC 编译的问题。 假设我有一个用于 A 型微 Controller 的驱动程序库 (driverA.hpp) 和一个用于 B 型微 Controller 的驱动程序库 (driverB.hpp)(外围设备等)。在这两个库中,函数接口(interface)是相同的。此外,我有某些设备的库,如设备 X,它应该可用于两种 Controller 类型(例如:deviceX.hpp)。在使用这些东西的项目 (projectY) 中,我将添加相应的驱动程序库(driverA.hpp 或 driverB.hpp)并且我想添加一个编译器标志以命名我想使用的 Controller 类型。

在deviceX.hpp中,我想区分这两种类型,所以我想添加这样的东西:

#ifdef CONTROLLER_A
  #include driverA.hpp
#elseif CONTROLLER_B
  #include driverB.hpp
#endif

这个库也将链接到 projectY,我想在其中添加一个编译器标志,如 CONTROLLER_A,并且将链接具有正确 Controller 类型的库 deviceX。

但是,我知道,这是行不通的。这就是为什么我要问你:做这种库依赖的最好(或:常见)的方法是什么?添加 deviceX 库作为源位置?还是有别的办法?

最好的问候

最佳答案

有很多方法可以实现您想要的,但需要注意的一件事是,如果两个 MCU 的驱动程序具有相同的接口(interface)(根据您的问题),那么包含基于不同 MCU 的不同 header 绝对没有意义#定义。如果您希望解决方案基于#define,您可以执行以下操作:

header (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
}

...等等。

关于c++ - 在静态库(C++、Eclipse CDT)中使用#ifdef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50456500/

相关文章:

c++ - 在 ONC RPC 中,从两个注册了不同程序的线程调用 svc_run() 是否有效?

c++ - 使用 TLS 的缓存未命中率更低?

c++ - 如何结束整个程序

c++ - 如何确定使用了哪个编译器来编译可执行文件?

eclipse - STM32 GDB/OpenOCD命令和Flash和Ram调试的初始化

eclipse - Eclipse Gradle Spring Boot MVC构建无法识别JSP

c++ - 帮助 Arduino 和 Analog Min Max 设置

c++ - 高效存储最多 2048 个字符的数组?

python - python进程之间的共享内存

java - Apache 点燃: Classloader