我有test.c,其中我想要声明
#include "abc.h"
(libabc的头文件)
仅当test.c已使用libabc编译为:
gcc test.c -labc
如果test.c只是编译为
gcc test.c
,不应包括abc.h。
我该怎么做?
答案 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来定义预处理器宏,并将其用作测试条件。我想不出任何其他方式。