QMake DEFINES

Pokud potřebujeme výsledek provedení shellového příkazu do definice pak:

Buď použijte $$system(). Toto je spuštěno při každém provádění qmake:

DEFINES += GIT_VERSION=$$system(git describe --always)

NEbo použijte $() pokud to chcete spustit při každém BUILDu (to je při provádění makefile).

Pro DEFINES je nutno uzavřít příkaz do apostrofů (to je první vrstva úniku), zejména obsahuje-li mezary, jinak qmake vloží nechtěné -D:

DEFINES += GIT_VERSION='$(shell git describe --always)'

To to pak zkopíruje doslova do makefile.

Pokud výstup příkazu obsahuje mezery, je potřeba další vrstva úniku – uvozovky (tentokrát pro make):

DEFINES += BUILD_DATE='"$(shell date)"'

Potřebujete-li uvozovky kolem hodnoty, pak je to pořeba provést obdobně jako v níže uvedeném příkazu. No zrovna hezké to není.

DEFINES += BUILD_DATE='"\\\"$(shell date)\\\""'

Mnozí doporučují použít stringfy provoz preprocesoru, v tomto případě:

#define _STR(x) #x
#define STR(X)  _STR(x)

printf("Toto bylo vytvoreno " STR(BUILD_DATE) "\n");

Čerpal jsem z fóra stackoverflow..