ПО, ЭВМ и АСУ из Таможенного Союза

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » GNU/Linux » Как сделать вложенные makefile наиболее правильно


Как сделать вложенные makefile наиболее правильно

Сообщений 1 страница 6 из 6

1

Вбоквел ветки Установка Сказочной Колесницы в Gentoo

Нужно собрать файлы следующим образом:

.c : .rc
    $(SED)

.h : .rh
    $(SED)

.o : .c .h
    # C preprocessor
    $(CPP)
    # C compiler
    $(CC)

# linking
binary : ,o
    $(LD)

Мы разделили файлы на два типа:
1) файлы в общей директории
2) файлы в отдельных директориях

при этом .c-файлы первой категории зависят от .h-файлов второй категории

разобъём makefile во вложенной директории на части (сборка .h-файлов) и всё остальное?
он и так разбит на части тем, что в нём есть разные цели для сборки.

Я предлагаю такой вариант:

Надо определить цель, которая выполняет дерусифицирование .rh-файлов с целью получения .h-файлов,
и вызывать именно эту цель из мейкфайла в общей директории.
в самом начале.

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

Отредактировано Лис (2023-03-14 09:05:56)

0

2

Существует такая знаменитая статья:
1998, Peter Miller, Recursive Make Considered Harmful

https://accu.org/journals/overload/14/71/miller_2004/

0

3

Лис написал(а):

Существует такая знаменитая статья:
1998, Peter Miller, Recursive Make Considered Harmful

https://accu.org/journals/overload/14/71/miller_2004/

Хорошая статья. Не догма конечно, но интересная.

0

4

Еще можно использовать .NOTPARALLEL: для определенной цели. Если с ним не сработает, то тогда перепишу Makefile. Давно уже хотел этим позаниматься, чтобы русифицированные исходники можно было раскладывать в виде древовидной структуры каталогов.

0

5

Ещё вопрос на stackoverflow:
https://stackoverflow.com/questions/724 … d-makefile

Кусок в документации по make:
https://www.gnu.org/software/make/manua … rsion.html

Отредактировано Лис (2023-03-14 14:26:35)

0

6

Евгений написал(а):

Еще можно использовать .NOTPARALLEL: для определенной цели.

Для какой именно цели?

Я так понял, что эта директива запрещает параллельный запуск (чего-то). Но проблема не в том, что подпроекты evgeny и intel64 собираются параллельно (они и должны).

https://www.gnu.org/software/make/manua … rgets.html

.NOTPARALLEL

    If .NOTPARALLEL is mentioned as a target with no prerequisites, all targets in this invocation of make will be run serially, even if the ‘-j’ option is given. Any recursively invoked make command will still run recipes in parallel (unless its makefile also contains this target).

    If .NOTPARALLEL has targets as prerequisites, then all the prerequisites of those targets will be run serially. This implicitly adds a .WAIT between each prerequisite of the listed targets. See Disabling Parallel Execution.

Проблема-то в другом, в том, что сначала надо собрать .h-файлы подпроектов, а затем всё остальное. То есть тут не ограничение на параллельность, а зависимость. Зависимости должны превращаться в правила.

«If a makefile completely and accurately defines the dependency relationships between all of its targets, then make will correctly build the goals regardless of whether parallel execution is enabled or not. This is the ideal way to write makefiles.»

Евгений написал(а):

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

Да вроде бы они и сейчас могут так делать, разве нет?

Отредактировано Лис (2023-03-14 14:56:37)

0


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » GNU/Linux » Как сделать вложенные makefile наиболее правильно