我遇到了一个我不知道如何解决的问题。
将以下typedef结构假设为test.h头文件:
typedef struct example_struct {
#ifdef CONFIG_A
int A;
#endif;
int B;
} example_struct_t;
我正在使用此头文件编译代码,使用-D选项将CONFIG_A传递给GCC。这样我就可以在结构中包含一个成员,或者如果给定的用例不需要则删除。
现在假设我生成了一个共享库(.so),我想分发它。所以,我有.so库和带有预编译器指令的头文件。问题是我不想在程序中使用库包含-DCONFIG_A,我的意思是,我需要保存库编译时使用的选项,不仅在源文件(.c)中,而且在头。也就是说,如果用-DCONFIG_A选项编译库,我想使用库的程序不应该在编译时包含该选项。
预编译头是否是此问题的解决方案或是否有其他替代方法(避免在定义预编译器指令的每个文件中包含config.h头)?
非常感谢您的指导。
答案 0 :(得分:0)
您可以“生成”结构定义的代码,并将生成的定义与相应的库一起发送。一个想法是将结构保留在没有#include
的标头中,在这种情况下,您可以在它们上运行C预处理器以获取没有#ifdef
的文件(然后您可以使用它来构建和船)。
另一种方法是在构建系统中执行一些特殊操作。例如CMake
有#cmakedefine
,您可以在C或C ++源文件中使用它,然后从中生成代码。