Я столкнулся с проблемой, которую не знаю, как решить.
Предположим, что в заголовочный файл test.h вложена следующая структура typedef:
typedef struct example_struct {
#ifdef CONFIG_A
int A;
#endif;
int B;
} example_struct_t;
Я компилирую код, используя этот файл заголовка, передавая CONFIG_A в GCC с параметром -D. Таким образом, я могу включить член A в структуру или удалить, если он не нужен для данного варианта использования.
Теперь предположим, что я создаю общую библиотеку (.so) и хочу ее распространить. Итак, у меня есть библиотека .so и заголовки с директивами прекомпилятора. Проблема в том, что я не хотел бы включать -DCONFIG_A в программу, использующую библиотеку, я имею в виду, что мне нужно было бы сохранить параметры, используемые во время компиляции библиотеки, не только в исходных файлах (.c), но и в заголовок. То есть, если вы компилируете библиотеку с опцией -DCONFIG_A, я полагаю, что программа, использующая библиотеку, не должна включать эту опцию во время компиляции.
Являются ли предварительно скомпилированные заголовки решением этой проблемы или есть какая-либо другая альтернатива (избегая включения заголовка config.h в каждый файл, определяющий директивы прекомпилятора)?
Большое спасибо за руководство.
CONFIG_A
определяется при компиляции некоторых единиц перевода, но не для других, у вас есть < i> неопределенное поведение. - person Some programmer dude   schedule 25.10.2016mylibrary.pc
файл с соответствующими параметрами препроцессора. Затем проинструктируйте своих пользователей использоватьpkg-config --cflags mylibrary
. - person rodrigo   schedule 25.10.2016struct
определения, не должны быть видны пользователям библиотеки - они должны взаимодействовать только через определенный API. - person Andrew Henle   schedule 25.10.2016