Запуск нескольких заданий: сочетание параллельного и последовательного

La línea

CC ?= gcc

en el Makefile significa "si la variable CCaún no está establecida, configúrela en gcc".

Más adelante en el Makefile, el compilador enumerado en la variable CCse usará para compilar archivos de lenguaje C(CCes una variable estándar para el compilador C ).

Si gcces el compilador que desea usar, no tiene que cambiar nada.

Si quiere usar otro compilador, como clango gcc-7o algo completamente distinto, no tiene que cambiar el Makefile. En su lugar, simplemente diga

make CC=clang

en la línea de comando (donde clangpuede ser solo el nombre ejecutable del compilador, o su ruta completa si no está disponible en su propio$PATH).

Para usarccache(una "caché del compilador")con, p. clang,

make CC='ccache clang'

Dado que Makefile comprueba si la variable CCestá configurada antes de configurarla en gcc, la forma mencionada anteriormente es la mejor manera de invocar makecon un compilador diferente. Si hubiera establecido el valor de CCincondicionalmente, habría tenido que editar el Makefile.

2
24.07.2019, 01:16
2 ответа
( a_1; a_2 ) &
( b_1; b_2 ) &
( c_1; c_2 ) &
wait

Это запустит три фоновых задания, а затем дождется их завершения. Каждое из трех фоновых заданий будет запускать свои команды одну за другой.

Для чуть более сложной вариации:

for task in a b c; do
    for num in 1 2; do "${task}_$num"; done &
done
wait

Это сделает то же самое, но создаст строки a_1, a_2и т. д., а затем выполнит задачи, возникающие в результате создания этих строк, как команды. Это, очевидно, будет работать только в том случае, если ваши задачи являются реальными командами с этими именами.

0
27.01.2020, 22:24

Параллельно с GNU:

parallel {1}_{2} ::: a b c ::: 0 1
parallel {}_2 ::: a b c

В качестве альтернативы:

parallel '{}_0; {}_1; {}_2' ::: a b c
0
27.01.2020, 22:24

Теги

Похожие вопросы