Makefile: Как я могу контролировать порядок частичной компиляции, когда использую 'make -j'? - PullRequest
1 голос
/ 27 февраля 2020

Я пишу make-файл и хочу, чтобы он по какой-то причине выполнил программу после компиляции.
Но это слишком медленно, когда я использую только команду 'make'. Поэтому я добавляю аргумент '-j' для ускорения .
Я просто хочу, чтобы он сначала скомпилировал все файлы и запустил программу, скомпилированную автоматически, но сначала запустил программу перед компиляцией.
Как я могу частично контролировать порядок?

makefile

all:test run
test:test1.o test2.o test3.o
    gcc test1.o test2.o test3.o -o test
test1:test1.c
    gcc -c test1.c
test2:test2.c
    gcc -c test2.c
test3:test3.c
    gcc -c test3.c
run:
    ./test

Может запускаться ./test до полной компиляции.

1 Ответ

1 голос
/ 27 февраля 2020

Как я могу частично контролировать заказ?

Вы управляете заказом, указывая зависимости между целями. Цель не будет построена до тех пор, пока не будут созданы ее предпосылки.

run должно зависеть от test:

run: test
    ./test

.PHONY: run

Поскольку run не является файлом или каталогом, он должен быть помечен как .PHONY target.

У меня обычно есть:

run_% : %
    ./$<
.PHONY: run_%

, чтобы вы могли использовать make run_this и make run_that, и сначала он собирает this и that.

...