如何:条件包括头文件

时间:2012-02-25 23:33:15

标签: linux compilation shared-libraries

我有test.c,其中我想要声明

#include "abc.h"(libabc的头文件)

仅当test.c已使用libabc编译为:

gcc test.c -labc

如果test.c只是编译为

gcc test.c,不应包括abc.h。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

一种方法是使用-D来定义宏:

gcc test.c -labc -DABC

#ifdef ABC
#include "abc.h"
#endif

如果您从Bash运行此命令,那么您原则上可以在gcc周围创建一个shell函数包装器,以便在指定-DABC时自动添加-labc

function gcc ()
{
    local arg
    for arg in "$@" ; do
        if [[ $arg = -labc ]] ; then
            command gcc "$@" -DABC
            return
        fi
    done
    command gcc "$@"
}

。 。 。但我真的不推荐。

答案 1 :(得分:1)

很难,因为链接阶段在编译完成后发生。您可以调整Makefile来定义预处理器宏,并将其用作测试条件。我想不出任何其他方式。