我有多个功能可以在项目构建时启用或禁用。
当前的实现使用诸如 #define FEATURE_FOO
之类的声明。每当我需要做一些与特定功能相关的事情时,我都会使用预处理器指令,例如 #ifdef
。
功能定义存储在全局头文件中。
这种方法有两个缺点:
- 它要求在每个文件中
#include
这个全局 header ,在任何其他 header 之前。 - 我无法轻易禁用 C 文件:
这不是很好:
// file: foo.c
#include <stdio.h>
#include "main_header.h"
#ifdef FEATURE_FOO
...
#endif
因为我更喜欢这个:
// file: foo.c
#ifdef FEATURE_FOO
#include <stdio.h>
...
#endif
因此,解决此问题的另一种方法是在构建时声明我的所有功能:
gcc -DFEATURE_FOO -c %< -o %@
我在这里不喜欢的是我需要手动将每个功能传递给我的编译器。
可接受的解决方法是读取包含所有功能的 features.list
文件。在我的 Makefile 中,我将拥有:
DEFINES=$(shell perl -ne 'print "-DFEATURE_$1 " if /(\w+)/' features.list)
%o: %c
gcc $(DEFINES) -c %< -o $@
我能找到什么更好的选择?
最佳答案
您可以使用 gcc 的选项 -include myheader.h
。
它将 myheader.h
的内容添加到当前翻译单元源的最开头。
关于C 项目 - 如何管理功能列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31657152/