web-dev-qa-db-fra.com

QT DEFINES fait-il la même chose que #define en C++?

Que fait le DEFINES += includthisvariable dans QT pour un fichier .pro?

Si cela fonctionne comme le #define en C++, où est-ce que includethisvariable est défini de sorte que le préprocesseur puisse remplacer includethisvariable par la valeur que j'ai définie?

Je comprends ce que #define fait en c ++ parce que vous définissez la valeur en regard de ce que vous définissez. Cependant, ici, il semble que vous n'indiquiez qu'un nom ... La documentation QT n'a pas aidé à expliquer cela pour moi.

13
Terence Chow

Les éléments de la variable DEFINES du fichier de projet Qt se retrouvent sur la ligne de commande du compilateur avec l'option -D (ou ce qui convient pour le compilateur utilisé). Pour donner une valeur à votre définition de macro au lieu de simplement la définir, utilisez ce qui suit:

DEFINES += FOOBAR=foobar_value

Cela apparaîtra sur la ligne de commande du compilateur sous la forme -DFOOBAR=foobar_value

Si vous avez besoin d'espaces, vous devez citer la valeur - et échapper aux guillemets qui seront transmis sur la ligne de commande du compilateur:

DEFINES += FOOBAR="\"foobar value\""

Celui-ci apparaît comme suit: -DFOOBAR="foobar value"

18
Michael Burr

Oui cela fonctionne de la même manière. DEFINES += includethisvariable inclut le symbole pré-processeur includethisvariable dans les sources en cours de compilation.

Cela signifie que toutes les déclarations #ifdef telles que

#ifdef includethisvariable
...
...
#endif

sont inclus dans la source en cours de compilation.

Des macros avec des valeurs peuvent également être définies 

`DEFINES += "MAXBUFFERSIZE=4096"
5
suspectus

De la documentation

Les définitions sont spécifiées dans le fichier .config. Le fichier .config est un fichier C++ Normal, ajouté à tous vos fichiers source lorsqu'ils sont Analysés. Utilisez uniquement le fichier .config pour ajouter des lignes comme dans l'exemple Ci-dessous: 

#define NAME value
1
Barış Akkurt

Si vous souhaitez définir une macro d'un littéral chaîne dans votre fichier qmake, équivalent à #define VAR "Some string"

Ça va ressembler à ça:

DEFINES += CODE_WORKING_DIR=\\\"$$PWD\\\"

Ainsi, cela produirait cela comme argument de g ++ (ou de tout ce que vous utilisez pour compiler):

g++ -c -DCODE_WORKING_DIR=\"/path/to/my/code\"

C'est moche. Si quelqu'un connaît un meilleur moyen, s'il vous plaît faites le moi savoir.

0
Adam Zahran