Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

497
Vistas
Linux make: necesita reconstruir un archivo de texto cuando cambia el archivo MAKE

He heredado una aplicación Linux C++ y un archivo MAKE. En el archivo MAKE existente, tenía un código como el siguiente:

 APPVER=5.01 REL=B $(APP): $(OBJS) $(MAKEFILE) echo $APPVER > .sw_ver.txt echo " " >> .sw_ver.txt echo $REL >> .sw_ver.txt $(LD) $(OBJS) $(LDFLAGS) -o $(APP)

En tiempo de ejecución, la aplicación abriría este archivo de texto y mostraría su versión.

En el espíritu de Make, reconstruir ese archivo .sw_ver.txt cada vez que se sentía mal. Así que lo dividí de la siguiente manera:

 APPVER=5.01 REL=B $(APP): $(OBJS) $(MAKEFILE) .sw_ver.txt $(LD) $(OBJS) $(LDFLAGS) -o $(APP) .sw_ver.txt: $(MAKEFILE) echo $APPVER > .sw_ver.txt echo " " >> .sw_ver.txt echo $REL >> .sw_ver.txt

Pasos:

  1. make -B : realiza los pasos, creando el archivo de texto y actualizando la aplicación.
  2. actualizar el Makefile
  3. make : aquí dice que no hay necesidad de actualizar el archivo de texto y elimina la regla.

Esperaba que viera que el Makefile había cambiado y, por lo tanto, actualice el archivo de texto. Pero no es así.

Intenté agregar un archivo ficticio, pero dice que parece haberse podado.

Lo que estoy tratando de hacer es solo si el Makefile ha cambiado (pensando que quizás APPVER o REL han cambiado), luego reconstruir el archivo .sw_ver.txt .

¿Tienes algún consejo?

Gracias

===== editar #1

hola, probé una alternativa, mover la información de la versión a un archivo en lugar de intentar crear el archivo durante una ejecución. Como heredé estas cosas, estaba tratando de cambiar lo menos posible.

Solo por el bien de la trivia, sería interesante saber si hay una respuesta a la pregunta original.

gracias de nuevo

archivo .sw_ver.txt

 5.01 B

Makefile:

 $(APP): $(OBJS) $(MAKEFILE) .sw_ver.txt $(LD) $(OBJS) $(LDFLAGS) -o $(APP) .sw_ver.txt: $(MAKEFILE)

===== editar #2

Hablé demasiado pronto. Esta configuración funciona si se cambia alguno de los OBJS , pero no funciona si se cambia el propio Makefile .

Entonces, amables extraños... ¿alguna idea? Gracias

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Dos cosas para aclarar:

  1. MAKEFILE no es una variable integrada implícita. Entonces, si no establece su valor, no contiene nada. (Puede ejecutar make -p en un directorio sin Makefile para ver qué variables hay. Consulte https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html )
  2. Según el motivo anterior, dado que su $(MAKEFILE) está vacío, cuando se expande, .sw_ver.txt se convierte en una regla sin requisitos previos . Por lo tanto, si .sw_ver.txt ya existe, no se hará nada para regenerarlo. Lo que obtienes es en realidad esto (ten en cuenta que tu sintaxis $APPVER y $REL también son incorrectas):
     .sw_ver.txt: # $(MAKEFILE) is empty echo PPVER > .sw_ver.txt # $(A) is empty echo " " >> .sw_ver.txt echo EL >> .sw_ver.txt # $(R) is empty

Así que lo que tienes que hacer es:

  1. Dale un valor a tu variable MAKEFILE .
     MAKEFILE := Makefile
  2. Arregle su sintaxis:
     .sw_ver.txt: $(MAKEFILE) echo $(APPVER) > $@ echo " " >> $@ echo $(REL) >> $@

Después de hacer esto, debería poder regenerar .sw_ver.txt cada vez que actualice su Makefile.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda