Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

498
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda