2015-03-20 2 views
2

Я работаю над проектом на ассемблере с использованием GNU bintools 2.25, созданного для цели m68k-elf, с GNU make 3.81 обработки сборки. (Поскольку это проект только для сборки, у меня нет gcc, построенного для m68k.)Как сделать GNU только как выходные зависимости?

При уточнении моей системы сборки я хотел бы иметь возможность автоматически генерировать список зависимостей для каждой моей сборки файлы, похожие на семейство опций -M* на gcc.

я обнаружил, что моя копия m68k-elf-as поддерживает -MD вариант для списка зависимостей, поэтому я добавил следующее правило к моему Makefile:

%.d: %.asm 
    $(AS) --register-prefix-optional -m68000 -MD [email protected] $(ASFLAGS) $< 

Хотя это в основном работает, есть два конкретных вопроса, я с ним ,

  1. -MD вариант требует имя файла для записи зависимостей; Я хотел бы, чтобы это перешло в STDOUT, поэтому я могу массировать его sed, прежде чем make взглянет на него. Я попытался дать ему одну тире (-), но он создает файл с этим именем вместо того, чтобы направлять его в STDOUT.

  2. Даже с включенной опцией -MD, as пытается собрать исходный код, который может вызвать ошибку и остановить весь процесс сборки. Я ожидал бы, что он будет выводить зависимости вместо сборки кода, а не выполнять оба действия.

Хотя это немного больше, чем раздражали прямо сейчас, я могу видеть, что существенно влияет на мой строит, поскольку проект становится все больше, особенно последний. Есть ли способ получить as для вывода зависимостей, не пытаясь собрать код?

+0

У меня нет ответов для вас, кроме взлома кода. Но я укажу, что «генерировать зависимости без сборки кода» отражает устаревшую модель управления предварительными условиями. Модель, описанная в руководстве GNU, является неоптимальной во многих отношениях. Посмотрите http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/ для лучшей модели.Это не решит проблему «выход на stdout», но она решит ваши «выходные данные только без сборки». Первый может быть разрешен «sed -i». – MadScientist

ответ

1

В документации для опции -MD указано, что «как» может генерировать файл зависимостей для создаваемого файла »(выделено мной), в котором говорится, что он не будет определять зависимости без сборки. Я не так хорошо разбираюсь в ассемблере, но это стандартная модель инструментальной линейки GNU, обслуживающая также такие языки, как C, в которых невозможно определить исходные зависимости, не выполняя хотя бы полный цикл предварительной обработки на источнике.

На практике этот режим работает отлично, если вы используете его по назначению, обновляя зависимости только как функцию построения проекта. Вам не нужно обновлять зависимости вне этого контекста, потому что если вы обновляете свой источник, чтобы добавить новую зависимость, это создает необходимость в любом случае восстановить этот источник, несмотря на его возраст по сравнению с новой зависимостью. Предположим, что Makefile обновляется с обновленной информацией о зависимостях в результате следующей сборки, будущие сборки будут реагировать соответствующим образом на изменения в новой зависимости.

Что касается массирования вывода зависимости, то его запись в файл означает, что вы не можете передать его в sed, а не то, что вы не можете обработать его с помощью sed.

Смежные вопросы