La línea
CC ?= gcc
en el Makefile significa "si la variable CC
aún no está establecida, configúrela en gcc
".
Más adelante en el Makefile, el compilador enumerado en la variable CC
se usará para compilar archivos de lenguaje C(CC
es una variable estándar para el compilador C ).
Si gcc
es el compilador que desea usar, no tiene que cambiar nada.
Si quiere usar otro compilador, como clang
o gcc-7
o algo completamente distinto, no tiene que cambiar el Makefile. En su lugar, simplemente diga
make CC=clang
en la línea de comando (donde clang
puede 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 CC
está configurada antes de configurarla en gcc
, la forma mencionada anteriormente es la mejor manera de invocar make
con un compilador diferente. Si hubiera establecido el valor de CC
incondicionalmente, habría tenido que editar el Makefile.
( 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
и т. д., а затем выполнит задачи, возникающие в результате создания этих строк, как команды. Это, очевидно, будет работать только в том случае, если ваши задачи являются реальными командами с этими именами.
Параллельно с GNU:
parallel {1}_{2} ::: a b c ::: 0 1
parallel {}_2 ::: a b c
В качестве альтернативы:
parallel '{}_0; {}_1; {}_2' ::: a b c