Tengo un Makefile que ejecuta una herramienta que lleva un poco de tiempo; me permite reemplazar el comando utilizado:
make TOOL=alternative-tool
Me gustaría omitir ese paso en el Makefile, por lo que estoy buscando un comando que salga con el estado 0 y que tenga efectos secundarios insignificantes.
Obviamente, podría usar true
, pero eso es un poco confuso:
make TOOL=true
Eso se lee como si quisiera ejecutar la herramienta, pero no lo hago.
¿Existe un ejecutable instalado por defecto que no /bin/true
salga con el estado 0 y que tenga un nombre pegadizo y fácil de escribir?
command-line
Roger Lipscombe
fuente
fuente
TOOL=true
estará en la línea de comando cuando invoque make, probablemente documentado en un archivo README cercano. La línea real que invoca la herramienta está en algún lugar dentro de un archivo MAKE de 7000 líneas (de terceros).Respuestas:
Aunque haya pedido algo que "no es
/bin/true
", la mejor solución es reemplazarlotrue
con el nombre completo/bin/true
para mostrar que es eltrue
programa en lugar de algún otro significado de "verdadero".Su preocupación es que el
true
enparece ser algo más que un nombre de comando. Pero si escribes
entonces eso es inequívocamente un comando. Alguien podría interpretar mal el
TOOL=true
significado de alguna otra herramienta en algún lugar, pero noTOOL=/bin/true
es probable que se lea mal .No estoy seguro de cuándo funcionará
:
, que es un shell incorporado pero no un comando externo. Henning Makholm ha informado que parece funcionar . Pero creo que no funciona en todas las situaciones, y descubrió que no funcionó para usted .En cuanto a un alias de shell, no puede usarlo porque la expansión de alias no se realiza en los argumentos que pasa a un comando, ni los archivos make hacen uso de alias de shell previamente definidos. Incluso si
make
ejecuta sus comandos en un nuevo shell, ese shell no tendrá el alias (y no lo usaría incluso si lo tuviera, porque sería un shell no interactivo, donde la expansión de alias no se habilita automáticamente).fuente
:
parece funcionar bien para mí.make
siempre genera un shell para ejecutar cada comando después de haber realizado sus propias sustituciones.:
, pero debería ser una respuesta (especialmente si es correcta) y ese comentario no explica por qué uno debería esperar que funcione. En un directorio conhello.c
y sin makefile, dondemake hello
compilahello.c
ahello
, me encontré conmake CC=: hello
comportado de acuerdo con lo que está diciendo.:
no funciona. Ser explícito sobre/bin/true
es probablemente la mejor manera de hacerlo.Si bien estoy de acuerdo en que usar la ruta completa para
true
sería la mejor solución, me gustaría señalar cuál es, con mucho, la forma más común de evitar la ejecución real de comandos: pegar unaecho
delante de ella. Entonces:fuente
TOOL
que de otra manera haría. Sin-s
o equivalente,make
emite información redundante, porque ambosmake
y elecho
comando ejecutado pormake
separado emiten salida. Por ejemplo, cuando ejecutomake CC=echo hello
en un directorio que tienehello.c
y no tiene un archivo MAKE, obtengoecho hello.c -o hello
como la primera línea de salida yhello.c -o hello
como la segunda. Pero algunas compilaciones usan (o el usuario puede agregar)-s
, y luego es útil.make -s CC=echo hello
da justohello.c -o hello
.Siempre puede hacer su propio comando que no hace nada más que devolver un estado de salida cero. Algunas opciones:
un enlace simbólico con nombre apropiado para
/bin/true
un script de shell vacío
un programa C casi vacío:
fuente
Cree un enlace simbólico en el directorio de trabajo a / bin / true llamado algo así
skip
. Así...Entonces la línea de creación puede ser ...
fuente
Aquí hay una manera de hacerlo con un poco más de caracteres:
Después de haberlo hecho una vez, puede volver a ejecutarlo simplemente usando el nombre
T
.fuente