模拟的弱别名

时间:2016-09-13 19:45:41

标签: c

我试图使用

模仿fn说foo
#ifdef UT_TEST
    void foo(void)  __attribute__ ((weak, alias ("foo_impl")));
#else
    void foo(void);
#endif

但是,有没有办法在@ runtime而不是编译时执行此操作?由于历史原因,我无法使用C ++。

1 个答案:

答案 0 :(得分:1)

过去我经常看到这个问题在构建系统级别解决了,我认为这是一个更清洁的解决方案。这样做可以避免大多数ifdef,而是使用完整文件。在make中,它可能看起来像这样:

OBJS += file1.o file2.o
ifeq ($(UNIT_TEST),y)
OBJS += dummy_implementation.o
else
OBJS += real_implementation.o
endif

myprog: $(OBJS)

或更经典的成语:

OBJS-y += file1.o file2.o
OBJS-$(UNIT_TEST) += dummy_implementation.o
OBJS-$(REAL_BUILD) += real_implementation.o
OBJS = $(OBJS-y)

myprog: $(OBJS)
在这种情况下,

dummy_implementation.c和real_implementation.c会共享一个头文件。