В библиотеке, которую я поддерживаю, есть несколько функций, которые зависят от pthreads. В проекте используется automake. Я хочу создать параметр configure, чтобы отключить зависимость от pthreads, которая должна просто не компилировать эти функции. (Причина в том, что некоторые кросс-компилирующие и внедренные цели.)Каков правильный способ обработки дополнительных общедоступных типов/функций для библиотеки с использованием automake?
Избегание компиляции файла, содержащего эти функции, работает нормально до сих пор, но теперь я понял, что эти функции и одна структура, которые они используют, определены в публичных заголовках.
- Каков правильный подход здесь, с точки зрения обслуживания библиотеки?
- Каков правильный способ сделать типы или функции опционными в публичных заголовках?
Первоначально я думал, что должен превращать заголовки в файлы ввода autoconf (.in) и генерировать заголовки с этими необязательными функциями и типами.
Но что же такое системы, которые могут иметь разные версии библиотеки, установленные одновременно? Обычно они должны иметь возможность делиться заголовками.
Должен ли я заголовок использовать препроцессор, чтобы избежать этих функций, и использовать pkg-config
, чтобы указать его как вариант командной строки?
Еще одна идея - переместить эти функции и типы в свой собственный заголовок и избежать установки этого заголовка, когда pthreads отключены. Это означало бы неправильное использование организации заголовков, но, возможно, это лучшая идея. Я хочу ваше мнение, хотя, что лучший способ справиться с дополнительной функциональностью в публичных заголовках библиотеки?