我正在用 c 编写一个程序,我想根据用户是否愿意编译一个翻译单元。基本上我有两个文件,一个 main.c 应该总是被编译。此外,我有一个文件,我们称之为 optional.c。optional.c 中的一些函数比 main.c 中的函数快得多,但它们也更容易出错。
在我的 main.c 中,我可以编写如下代码
#ifdef USE_OPTIONAL
some function call from optional.c
#else
some function call from main.c
#endif
在我的 makefile 中,我还想编译 optional.c 仅当它应该被使用时,比如说
gcc -c optional.c
gcc -c -DUSE_OPTIONAL main.c
gcc main.o optional.o
如果没有,只需
gcc -c main.c
gcc main.o
它有两种不同的规则,一种称为“all:”,一种称为“optional:”,但我更喜欢只输入“make”而不是“make optional”。实现这一点的最简单方法是什么?我应该转向配置脚本和 Makefile.in 还是只有第二条规则更好?是否有可能实现例如“make USE_OPTIONAL=1”,然后让读取变量 USE_OPTIONAL 的输入来弄清楚该怎么做?
您可以在 Makefiles 中对 C 预处理器指令使用类似的方法,至少如果您使用的是 GNU Make:
USE_OPTIONAL
有了这个,在调用中给定的任何值make
都将导致包含可选功能。如果您想要更具体的测试,您可以使用
而不是
ifdef
线。那么你就需要专门make USE_OPTIONAL=1
的 .