Вопрос относится к следующей команде сборки, которая является частью проекта, который я унаследовал от потерянного программиста, которого я не могу попросить объяснить. Проект был основан на образце «задержки» 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).
-DHAVE_CONFIG_H
определяетHAVE_CONFIG_H
(-D
устанавливает определение).-I.
устанавливает текущий каталог в качестве пути включения. Нет причин делать это дважды - я предполагаю, что второй случай - опечатка. - person simonc   schedule 01.09.2014