как написать общий make-файл на основе простого списка источников - PullRequest
1 голос
/ 22 апреля 2020

У меня есть список файлов, таких как:

SOURCES = program1.txt \ 
          program2.txt \
          ... \ 
          program_n.txt

, из которого я хочу сгенерировать, если указано, обработчики в C, Python, et c. Позже они будут скомпилированы / включены в верхний make-файл.

как мне написать свой make-файл, чтобы из каждого файла в SOURCES он генерировал свой обработчик, вызывая скрипт.

основные цели должны быть примерно таким:

all: handler_py handler_c ... handler_whatever

handler_py: all_my_possible_python_handlers

handler_c: all_my_possible_c_handlers

handler_whatever: all_my_possible_whatever_handlers

Итак, в итоге мы получаем

sources/(name_of_program).txt produces output/handler_type/my_handler_(name_of_program).handler_type 

Идея состоит в том, что всякий раз, когда я пишу новую программу, мне нужно только обновить список ИСТОЧНИКОВ

вместо копирования, например:

handler_py : output/my_handler_program.py output/my_handler_program1.py ... 

output/my_handler_program.py : sources/program.txt
    ./generate_handler.py py sources/program.txt

output/my_handler_program1.py : sources/program1.txt
    ./generate_handler.py py sources/program1.txt
...

1 Ответ

0 голосов
/ 22 апреля 2020

Простое использование правил шаблона :

SOURCES = program1.txt program2.txt

handler_py: $(patsubst %.txt,output/my_handler_%.py,$(SOURCES))

output/my_handler_%.py : sources/%.txt
        ./generate_handler.py py $<
...