Почти каждый проект с открытым исходным кодом c/C++ Я вижу корабли с ним файл configure
.Когда проекту c/C++ нужен файл конфигурации?
Но в проекте я не видел этот файл до сих пор наш собственный C/C++,
, когда он нужен?
Почти каждый проект с открытым исходным кодом c/C++ Я вижу корабли с ним файл configure
.Когда проекту c/C++ нужен файл конфигурации?
Но в проекте я не видел этот файл до сих пор наш собственный C/C++,
, когда он нужен?
Я думаю, что вы говорите о скрипте configure, который используется, когда autotools используются для создания проекта.
Основной целью файла configure
является генерация Makefiles
, соответствующая вашей конфигурации системы, и проверка различных предварительных условий (например, установленных libs).
Когда нам нужно проверить предварительные условия, можем ли мы обнаружить его во время выполнения, когда это необходимо? – wireshark
Предположим, что один компилятор доступен на одной ОС, а другой - на другой ОС. Команда для создания вашей программы (и, следовательно, make-файла) должна быть разной для каждой ОС. Задача файла конфигурации заключается в обнаружении таких различий и создании соответствующих make-файлов для вашей системы. – Jaywalker
@wireshark: также можно проверить, установлены ли в вашей системе соответствующие библиотеки (чтобы предотвратить получение компиляции или ошибки связи позже), при необходимости получите некоторую системную информацию (имя хоста, версию и т. Д.), Найдите путь к определенным исполняемым файлам (например, lex), проверьте, поддерживают ли некоторые используемые инструменты определенные параметры. – beduin
Когда вам становится слишком сложно создать Makefile вручную.
Это задача Automake и CMake, а не autoconf. – Begemoth
A configure
сценарий - предпоследний шаг в построении проекта, который использует GNU autotools. Autotools - это набор инструментов, предназначенных для максимизации переносимости приложения между различными операционными средами POSIX и POSIX, которые могут иметь несколько иные функции вне базового набора, который требуется приложению.
TL; configure
имеет значение, когда вы хотите переносимость между различными операционными системами.
Можете ли вы дать крошечный пример, показывающий, как «configure» может сделать портативный? – wireshark
'configure' сам по себе не может. Инструменты, которые его генерируют, а также файлы шаблонов, используемые этими инструментами, делают приложение переносимым. –
Конфигурация создается autoconf из GNU Autotools. Вы можете использовать autoconf и automake для управления системой сборки для вашего проекта; если вы не хотите или не можете полагаться на существующую среду IDE, autotools - это еще один способ управления созданием и установкой вашего кода. Переносимость ОС - еще одна важная вещь, с которой они помогают, хотя в основном это разные системы на базе UNIX, и это уже не так много проблем.
Более подробно, если вы устали вручную редактировать Makefile или должны выйти из своей среды разработки, рассмотрите возможность использования Autotools или одного из его альтернатив, например CMake или SCons.
configure
сценария служит в основном три цели:
Цель 3 всегда была бесполезной для правильно написанного кода. Нет причин, по которым вам нужно знать, например, sizeof(int)
на уровне препроцессора. Если вы хотите получить конкретный размер, используйте целочисленный тип фиксированного размера, например int32_t
(и как часть 2-го пункта, конфигурация может паттать по сломанным системам, которые его не хватает). Аналогичным образом, вам не следует писать программы, поведение которых зависит от того, возвращает ли malloc(0)
NULL
или «уникальный указатель, который может быть успешно передан до free
». (Да, есть много сломанного программного обеспечения, которое действительно заботится!)
Цель 2 была исторически очень важна для того, чтобы версии базового системного программного обеспечения GNU стали настолько вездесущими, поддерживая огромный спектр фирменных Unices со сломанными компиляторами и библиотеками и обеспечивая лучшее качество, чем обычные инструменты могли бы предложить , В настоящее время каждая Unix-подобная система имеет встроенные и средние среды исполнения, которые полностью или почти совместимы с POSIX, и вы можете получить их с помощью -D_POSIX_C_SOURCE=(version goes here)
и, возможно, с некоторыми дополнениями к $PATH
для материала оболочки. Таким образом, цель 2 в целом устарела и вредна сейчас, если вы не пытаетесь поддерживать не-POSIX-системы, такие как Windows (без cygwin).
Назначение 1 по-прежнему очень актуально и не уходит в ближайшее время.
Некоторые проекты, возможно, по очень веской причине, не любят GNU autotools и отказываются использовать любой из них, либо опуская configure
, либо сворачивая свои собственные. Если вам нужна только configure
для первой цели, такой подход может иметь смысл, если вы понимаете все потенциальные проблемы и умеете писать переносные сценарии оболочки. Однако если вы это сделаете, обязательно изучите и соблюдайте все соглашения configure
о том, как параметры (например, --enable-*
, --prefix
и т. Д.) И переменные (, CPPFLAGS
и т. Д.) Работают так, что вы не создаете кошмар для пользователей. И имейте в виду, что использование autoconf может быть проще и выгоднее - но, пожалуйста, не тратьте время на то, чтобы все время проверяли глупые вещи, такие как sizeof(int)
, или же для компилятора Fortran.
Возможно, он содержит CMakeLists.txt? – Begemoth
Я думаю, нет. CMakeLists.txt используется для системы сборки cmake. Файл 'configure' обычно используется' autotools'. – beduin
@Begemoth, нет, есть только 'Makefile' .. – wireshark