Когда проекту c / c ++ требуется файл конфигурации? - PullRequest
3 голосов
/ 27 апреля 2011

Почти каждый проект c / c ++ с открытым исходным кодом, который я вижу, поставляется с файлом configure.

Но в нашем собственном проекте c / c ++ я пока не видел этот файл,

когда это нужно?

Ответы [ 5 ]

7 голосов
/ 27 апреля 2011
Скрипт

A configure является предпоследним этапом в создании проекта, который использует GNU autotools . Autotools - это набор инструментов, который был разработан для максимизации переносимости приложения между различными POSIX и POSIX-подобными операционными средами, которые могут иметь слегка отличающиеся функции вне базового набора, в котором нуждается приложение.

TL; DR: configure имеет значение, когда вам нужна переносимость между различными операционными системами.

5 голосов
/ 27 апреля 2011

Я думаю, вы говорите о скрипте configure, который используется, когда autotools используются для сборки проекта.

Основная цель файла configure - сгенерировать Makefiles, соответствующий конфигурации вашей системы, и проверить различные предварительные условия (например, установленные библиотеки).

3 голосов
/ 27 апреля 2011

Когда вам становится слишком сложно создавать Makefile вручную.

0 голосов
/ 27 апреля 2011
Сценарий

A configure в основном служит трем целям:

  1. Обнаружение доступности (или предпочтений пользователя) дополнительных библиотек или проверка наличия и правильных параметров, необходимых для использования обязательных библиотек.Программа зависит от.
  2. Работа с неработающими операционными системами, в которых стандартные функции библиотеки отсутствуют или ведут себя не так, как указано в стандартах.
  3. Работа с неверными непереносимыми предположениями в вашей программе путем обнаружениясистемные параметры, о которых вам не нужно заботиться и сообщать о них своей программе.

Цель 3 всегда была бесполезна для правильно написанного кода.Например, вам не нужно знать sizeof(int) на уровне препроцессора.Если вы хотите определенный размер, используйте целочисленный тип фиксированного размера, такой как int32_t (и как часть пункта 2, configure может исправлять ошибки в поврежденных системах).Аналогично, вы не должны писать программы, поведение которых зависит от того, возвращает ли malloc(0) 1015 * или «уникальный указатель, который может быть успешно передан на free».(Да, есть много сломанного программного обеспечения, которое на самом деле заботится!)

Цель 2 исторически была очень важна для того, чтобы версии базового системного программного обеспечения GNU стали настолько повсеместными, поддерживая огромный спектр проприетарных Unices со сломаннымикомпиляторы и библиотеки, обеспечивающие лучшее качество, чем обычно могут предложить нативные инструменты.В настоящее время каждая Unix-подобная система имеет среды сборки и среды выполнения, которые полностью или почти совместимы с POSIX, и вы можете получить их с помощью -D_POSIX_C_SOURCE=(version goes here) и, возможно, с некоторыми добавлениями к $PATH для оболочки.Таким образом, цель 2 обычно устарела и вредна, если только вы не пытаетесь поддерживать не POSIX-системы, такие как Windows (без cygwin).

Цель 1 все еще очень актуальна и не исчезнет в ближайшее время.

Некоторые проекты, возможно, по очень веской причине, не любят автоинструменты GNU и отказываются использовать какие-либо из них, либо пропуская configure, либо переходя на собственные.Если вам требуется configure только для первой цели, этот подход может иметь смысл, если вы понимаете все потенциальные проблемы и знаете, как написать сценарий переносимой оболочки.Однако, если вы сделаете это, обязательно изучите и соблюдайте все configure соглашения о том, как параметры (например, --enable-*, --prefix и т. Д.) И переменные (CFLAGS, CPPFLAGS и т. Д.).) работать, чтобы вы не создавали кошмар для пользователей.И имейте в виду, что использование autoconf может быть проще и стоит делать, но, пожалуйста, не тратьте впустую время на то, чтобы проверять такие глупые вещи, как sizeof(int), или работает ли компилятор Fortran.

0 голосов
/ 27 апреля 2011

configure генерируется autoconf из GNU Autotools. Вы можете использовать autoconf и automake для управления системой сборки вашего проекта; Если вы не хотите или не можете полагаться на присутствие вашей IDE, то автоинструменты - это еще один способ управления сборкой и установкой вашего кода. Переносимость ОС - еще одна важная вещь, с которой они помогают, хотя в основном между различными системами на основе UNIX, что больше не является проблемой.

Более кратко, если вы устали от ручного редактирования Make-файлов или хотите выйти из своей IDE, подумайте об использовании Autotools или одной из его альтернатив, таких как CMake или SCons.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...