Voy a "desarrollar" ,un poco mas el tema de los makeflags.
cuando compilamos un codigo fuente.. "make" , se puede definir la cantidad de hilos para la tarea, tal que si tenemos 4 nucleos , podriamos usarlos todos con ..
make -j4
en bash se usa el fichero .bashrc , para definir algunas variables del entorno de consola y algunos "alias"
un alias es una sustitucion , por ejemplo
alias make ="make -j4"
convertiria cada ejecucion "make"..en el comando entero ..
en wifislax tenemos algunos muy utiles ,como en grep , que se pone l argumento --colors=auto , de forma que al obtener positivos en busquedas , aparecen en rojo y se identifican rapidamente con la vista.
en los updaters , teniamos implementado "make -j NUCLEOS" , que es exactamente lo que hablo , y que decidi no usarlo ,por que al leer la ayuda de make
make --help
pone que si no se especifica nada , los hilos son "infinitos", lo cual me lleva a pensar que puede usar automaticamente el -j , sin decirle cuantos nucleos hay y usara todo lo que pille ...
pero esto parece no ser asi , o yo lo entendi mal.
¿y como me he dado cuenta pues de que algo no andaba bien?
pues en la compilacion de un codigo pequeño ,apenas ni vemos diferencias entre decir cuantos nucleos hay o que solo utilice uno ...es tan rapido que ni lo hechas en falata ...el tema esta en tareas de compilacion mas pesadas ,como puede ser un kernel ..
estaba tocando el updater de kernel ... y "ho , dios mio ..sorpresa" ...abro la shell ..y lanzo el script a mano ...y veo que solo ha tardado 16 minutos ... ¿what the fuck ****?
simple ... al lanzarlo a mano , la variable que tenemos en bashrc, si es valida y funcional..y se aplica..
# Set the values for some environment variables:
export MAKEFLAGS='-j '$(grep -c ^processor /proc/cpuinfo)
pero los updaters , se lenzan desde un *.desktop" , entrada de menu ... y no se muy bien, por que , pero el bashrc ,parece no afectar si el script se lanza desde un desktop ...con lo que , ya no funcionaria el MAKEFLAGS , y por eso desde el menu , compilar el kernel tarda mas de una hora.
tampoco es bueno en casos concretos usar todos los nucleos del cpu para compilar, hay proyectos que al usar multithread, entran en error de compilacion y se usa un
make -j1
para que solo abra un hilo de trabajo.
¿que voy a hacer con esto? ...
aun no lo se bien, tengo que estudiarlo ... lo suyo seria que el bashrc tubiera validez, igual que al lanzar el proceso manualmente ...
no se si en vez de un
export MAKEFLAGS , deberia usar un
setenv MAKEFLAGS , y los updaters que vayan con un solo hilo , hagan antes un
unset MAKEFLAGS ...
no era cuestion de si sabia o no lo de make -j nucleos , por que si lo sabia, es cosa de que parece que al loanzar un script desde un desktop , el bashrc es ignorado ...
siento el tocho , pero as leeis algo
