可选择编译翻译单元 makefile

可选择编译翻译单元 makefile

我正在用 c 编写一个程序,我想根据用户是否愿意来选择编译一个翻译单元。基本上我有两个文件,一个应该始终编译的 main.c 。此外,我有一个文件,我们将其称为“可选.c”。 option.c 中的某些函数比 main.c 中的函数快得多,但它们也更容易出错。

在我的 main.c 中我可以编写如下代码

#ifdef USE_OPTIONAL
some function call from optional.c
#else
some function call from main.c
#endif

在我的 makefile 中,我还想仅在应该使用的情况下编译 option.c,例如

gcc -c optional.c
gcc -c -DUSE_OPTIONAL main.c
gcc main.o optional.o

如果没有,只需

gcc -c main.c
gcc main.o

它有两种不同的规则,一种称为“all:”,一种称为“可选:”,但我更喜欢只输入“make”而不是“make optional”。实现这个最简单的方法是什么?我应该转向配置脚本和 Makefile.in 还是只使用第二条规则更好?是否可以实现例如“make USE_OPTIONAL=1”,然后让 make 读取变量 USE_OPTIONAL 的输入来弄清楚要做什么?

答案1

您可以对 Makefile 中的 C 预处理器指令使用类似的方法,至少如果您使用的是 GNU Make:

ifdef USE_OPTIONAL

main.o: CPPFLAGS += -DUSE_OPTIONAL

program: main.o optional.o

else

program: main.o

endif

完成此操作后,调用USE_OPTIONAL中指定的任何值都make将导致包含可选功能。

如果您想要更具体的测试,您可以使用

ifeq ($(USE_OPTIONAL), 1)

而不是线ifdef。那么你就需要专门的make USE_OPTIONAL=1

相关内容