所以我有一个小项目,一堆* .c,*。h文件。配置文件中有许多#define语句形式的编译时开关,用于启用/禁用特定功能。所以文件settings.h可能包含
#define ENABLE_THIS_FEATURE 1
#define ENABLE_THAT_FEATURE 0
#define THAT_BUFFER_SIZE 128
现在的诀窍是,每个编译单元的设置文件都不是明确的#include
d。相反,它使用gcc的-imacros开关进行每个编译,例如gcc -imacros settings.h -o module.o module.c
。
现在我希望设置文件在源上运行doxygen时也有前置,这样它就可以为完全启用的功能生成doc。虽然该文件本身通常由Doxygen处理(它只是源树中的另一个文件),但其中的宏定义不会生效;看来,每个文件都是单独评估的(这当然是明智之举)。
可接受的替代方案是在命令行上提供每个定义,例如gcc的-D开关。显然#include每个编译单元中的设置文件不是一个选项(否则我不会采用gcc特定的-imacros方法)。
答案 0 :(得分:1)
这里感兴趣的配置指令是PREDEFINED
。
PREDEFINED += ENABLE_THIS_FEATURE=1
PREDEFINED += ENABLE_THAT_FEATURE=0
PREDEFINED += THAT_BUFFER_SIZE=128
现在可以使用某些脚本foo从相关的头文件生成此内容。 (Doxygen可以从stdin读取其配置文件。) 一旦你知道它,就不那么难了。 ; - )
提示:确保你已正确编造了INCLUDE_PATH。