Domanda

Il mio attuale flusso di lavoro:

  1. hg update (o qualunque cosa si usa per controllare una revisione)
  2. MyProject.pro qmake MyProject.vcproj
  3. Aprire Visual Studio, modificare i file
  4. Crea progetto

Durante la fase di costruzione, come posso aggiornare il mio file di intestazione config.h con le informazioni da un sistema di controllo di versione (ad esempio hg id )?

MyProject.vcproj è generato da qmake , quindi non dovrebbe modificare a mano.

È stato utile?

Soluzione

È possibile eseguire i comandi esterni da qmake dentro. Il modo più semplice per rendere le informazioni disponibili nelle fonti sarebbe quella di utilizzare una definizione:

HGID = $$system(hg id)
DEFINES += HGID=\\\"$$HGID\\\"

Non sono sicuro se è possibile modificare un file esterno da qmake. È possibile utilizzare uno strumento esterno, ma su Windows normalmente non avere cose come sed, quindi potrebbe essere un po 'più problematico.

Altri suggerimenti

È possibile realizzare questo con un obiettivo di generazione personalizzata e la parola chiave PRE_TARGETDEPS. Supponendo config.h.in ha il formato folowing:

#define HGID $HGID

È possibile definire un obiettivo di generazione personalizzata che elaborerà hgid.h.in e l'uscita per hgid.h prima di costruire il tuo obiettivo principale come segue:

hgid.target = hgid
hgid.commands = sed s/\\\$$HGID/`hg id`/ hgid.h.in > hgid.h
QMAKE_EXTRA_TARGETS += hgid
PRE_TARGETDEPS += hgid

Un'Opton è quello di consentire la rel="nofollow Chiave Estensione . Mettete qualcosa di simile nel tuo hgrc (o Mercurial.ini se vi piace il genere):

[extensions]
hgext.keyword=

[keyword]
config.h =

[keywordmaps]
HGREV = {node}

Poi, nel mettere config.h:

#define HGREV "$HGREV$"

Potrebbe essere necessario analizzare il valore esadecimale fuori del "$ HGREV: deadbeefdeadbeef $". Che si otterrà, ma questo è fatto facilmente con qualsiasi codice accede al HGREV definire

Oltre a Lukáš Lalinský e commentare di goodrone, vorrei ricordare che qmake può collegare direttamente allo script, non solo per il suo output. Quindi si può dire

DEFINES += REPO_ID=\\\"`./setlocalversion.sh`\\\"

e lo script sarà appena eseguito per ogni singola destinazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top