У меня есть довольно большая программа, написанная на C. Она состоит из нескольких файлов и немного переработана, чтобы попытаться компенсировать проблемы с платформой. В частности, у меня есть файлы заголовков для разных операционных систем, архитектур и компиляторов, которые определяют макросы, которые он использует для обработки вещей. Например, флаг -v
выводит информацию о версии, включая имя компилятора, который его построил, а также операционную систему и архитектуру, на которых он был построен. В качестве примера того, почему это важно, программа может создать файл кода C и, если хотите, скомпилировать его — задача, для которой она просто вызывает системный вызов любого компилятора, который был собран.
Он также поддерживает библиотеку GNU Readline (или библиотеку BSD Editline — то же самое), если она найдена в вашей системе, а также эквивалент без всех приятных функций Readline, который является чистым ANSI, если у вас его нет.
Суть в том, что я не могу убрать какие-либо из битов, зависящих от платформы, поскольку некоторые функции довольно сильно зависят от того, какая у вас ОС/архитектура/компилятор. Я также хочу предоставить хороший функционал тем, у кого он есть. И я хочу, чтобы люди загружали и устанавливали его со стандартным интерфейсом ./configure
, make
и make install
.
В настоящее время я использую извиняющий самодельный сценарий оболочки для configure
, который создает Makefile с нуля и определяет, какие заголовочные файлы включать в зависимости от вашей ОС/архитектуры/компилятора. Мне нужен более эффективный подход, и я хотел бы использовать более стандартную систему сборки с использованием GNU Autotools. Таким образом, я знаю, что то, что я делаю, будет работать на чужом компьютере, и мне не нужно тестировать это на их компьютерах.
Мой вопрос для тех из вас, кто прошел через все это (спасибо!), заключается в следующем: 1) Как мне переключиться с системы сборки homebrew на GNU Autotools? 2) Какие есть хорошие учебные пособия для начала работы с GNU Autotools? 3) Как я могу сделать этот процесс относительно безболезненным?