Параметры компиляции для проекта alsa

Вопрос относится к следующей команде сборки, которая является частью проекта, который я унаследовал от потерянного программиста, которого я не могу попросить объяснить. Проект был основан на образце «задержки» alsa utils, который он расширил, чтобы обеспечить другие функции. Команда работает над проектом, но я хочу начать удалять весь неиспользуемый мусор в проекте, и мне нужно понять, что здесь происходит. Я могу программировать на C и использовать gcc в базовом смысле, но я не очень хорошо понимаю приведенную ниже команду. Интересно, может ли кто-нибудь подтвердить мои предположения ниже и объяснить пару битов:

У меня есть эта команда для сборки проекта:

если gcc -DHAVE_CONFIG_H -I. -Я. -I../include -I../include -Wall -pipe -g -g -O2 -MT latency.o -MD -MP -MF ".deps/latency.Tpo" -c -o latency.o latency. в; затем mv -f ".deps/latency.Tpo" ".deps/latency.Po"; иначе rm -f ".deps/latency.Tpo"; fi && /bin/bash ../libtool --tag=CC --mode=link gcc -lvgagl -lvga -Wall -pipe -g -g -O2 -o latency latency.o ../src/libasound.la

Кажется, я понимаю, что здесь происходит. Wall = предупреждения, pipe = не имеет значения, -g = отладка, -O2 оптимизация, -MT создать объектный файл вместо исполняемого, и в целом первый бит команды означает создание списка зависимостей из latency.c, а также компиляцию задержка.o. Файл зависимостей должен называться .deps/latency.Tpo.

Если первая команда возвращает успех, переместите .deps/latency.Tpo в .deps/latency.po, если она возвращает ошибку, удалите .deps/latency.Tpo.

Затем, если удаление или перемещение прошло успешно, запустите последний бит (после &&). Что связывает latency.o, ../src/libasound.la, lvgagl и lvga вместе в исполняемую задержку.

В настоящее время проект использует svgalib, который мне не нужен, поэтому я начну с его удаления, и я предполагаю, что затем смогу удалить -lvgagl -lvga из команды libtool.

Однако я совершенно не понимаю '-DHAVE_CONFIG_H -I. -Я. -I../include -I../include' часть. Я знаю, что -I - это путь поиска заголовочного файла, но почему он повторяется дважды? И что означает DHAVE_CONFIG_H? И зачем создавать файл зависимостей, если он больше не используется (я не вижу других ссылок на него на этапе libtool).


person Pete    schedule 01.09.2014    source источник
comment
-DHAVE_CONFIG_H определяет HAVE_CONFIG_H (-D устанавливает определение). -I. устанавливает текущий каталог в качестве пути включения. Нет причин делать это дважды - я предполагаю, что второй случай - опечатка.   -  person simonc    schedule 01.09.2014


Ответы (1)


Большая часть этого дерьма автоматически генерируется automake и autoconf; вы можете игнорировать это.

Дублированные включаемые пути не помешают, поэтому никто не удосужился их избежать. -DHAVE_CONFIG_H генерируется autoconf, но не используется никаким кодом в alsa-lib (ни latency.c).

Единственными нестандартными вариантами здесь являются -lvgagl -lvga библиотеки, с которыми вы уже умеете обращаться. Все остальное можно игнорировать при переходе на другую систему сборки; значения по умолчанию будут работать нормально.

person CL.    schedule 01.09.2014
comment
Большое спасибо. Есть идеи, почему создается файл зависимостей? Может быть, потому что другие вещи могут ссылаться на этот объектный файл после его создания? - person Pete; 02.09.2014
comment
Он всегда генерируется automake. - person CL.; 02.09.2014