2011-05-10 14 views
17

Qué cambios debo hacer en el archivo .pro si quiero ejecutar el comando chmod, ejecutar el archivo binario de salida o realizar algunas otras operaciones.¿Cómo ejecutar el comando de shell después de que la compilación finalizó desde .pro en QT?

+1

¿Podría hacerse a través de QMAKE_POST_LINK? Nunca usé esto yo mismo, así que no lo pondré como respuesta. Tal vez vale la pena echarle un vistazo? – Bart

+0

He intentado QMAKE_POST_LINK, ¡funciona bien! – camino

Respuesta

24

Tuve un problema similar. Quería una herramienta especial (versioner) para ejecutar el código cada vez que se ejecutaba el Makefile. Aquí está la solución:

(para ser leídos en el Qmake Manual, Configuring qmake's Environment, Section: Customizing Makefile Output)

crear su propio destino Makefile. Especificar el comando etc.

mytarget.target = .buildfile 
mytarget.commands = touch $$mytarget.target 

QMAKE_EXTRA_TARGETS += mytarget 

De esta manera, usted tiene un objetivo adicional, puede llamar con make mytarget por ejemplo. Si desea unirlo al buildgetget real, tendrá que agregar:

POST_TARGETDEPS += mytarget 

Espero que ayude.

Saludos
D

+8

en este caso, el comando táctil se ejecutará después de completar la compilación y antes del enlace, si desea ejecutar toque tras enlace, QMAKE_POST_LINK es adecuado. – camino

0

La respuesta correcta depende de exactamente lo que quiere, y cuando. Sin embargo, como se ve en algunos comentarios publicados anteriormente, aquí QMAKE_POST_LINK es probablemente lo que desea en lugar de POST_TARGETDEPS.

Salida este post relacionados: QMake: execute script after build

Por un lado, cuando se utiliza POST_TARGETDEPS que dispara ANTES de su exe se crea (en Windows) o antes de que se vuelve a crear (en Linux)! QMake funciona de manera diferente según la plataforma y el compilador.

Necesitaba hacer algunos "procesamientos de símbolos" en un exe cuando se recompilaba. POST_TARGETDEPS me dio problemas tanto en Windows (usando mingw) como en Linux (usando gcc). En Windows, ejecutó mi script prematuramente, y en Linux sobrescribió mi exe después de que lo había modificado (es decir, se volvió a agregar mi información de depuración al exe después de haberlo eliminado en mi script externo). QMAKE_POST_LINK funcionó perfectamente, sin embargo, en ambos casos. ¡También es corto, dulce y más claro en comparación!

0

Otra forma de hacer las cosas en orden dada es usar vacío "super" objetivo:

super.depends = target_pre first target_post 
QMAKE_EXTRA_TARGETS += super 

Dónde first - es objetivo qmake por defecto, y target_pre y target_post algunos objetivos personalizados. Ahora make super simplemente hazlo.

Cuestiones relacionadas