我对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库添加为源位置?或者还有另一种方式吗?
最好的问候
答案 0 :(得分:0)
有很多方法可以实现你想要的东西但有一点要注意的是,如果两个MCU的驱动程序具有相同的接口(根据你的问题),那么根据不同的MCU包含不同的标题绝对没有意义#define语句。如果您希望解决方案基于#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
}
......等等。