7
votes

Makefile Modification pour prendre en charge C ++ 11

Je suis capable de compiler un seul fichier à l'aide de GCC avec -std = C ++ 0X Option. Mais je ne peux pas faire cela à travers makefile. Voici l'ensemble des drapeaux dans mon maquillage (qui après la plainte sur les mots-clés C ++ 11): xxx pré>

Qu'est-ce que je manque? P>

EDIT : Je l'ai changé à ce qui suit, mais je reçois toujours des erreurs de compilation, que je ne reçois pas avec la ligne de commande de la ligne GCC Invocation. P>

CXXFLAGS=-O3 -std=c++0x -pg -D_DEBUG -g -c -Wall


4 commentaires

Vous voulez probablement cflags + = trucs , pas cflags = truc .


Pourquoi avez-vous plusieurs CFLAGS? Pourquoi pas seulement "cflags = -o3 -std = c ++ 0x -pg -d_debug -g -c -wall"?


Je l'ai changé à ce qui suit, mais je reçois toujours des erreurs de compilation, que je ne reçois pas avec l'invocation de la ligne de commande GCC. Cxxflags = -O3 -STD = C ++ 0x -pg -d_debug -g -c -wall


Quelle est la ligne de commande imprimée lorsque g ++ est appelée? Quelles sont les erreurs que vous obtenez?


3 Réponses :


12
votes

De cette façon, votre fabricant utilisera tous vos CFLAGS CODE>:

CFLAGS=-O3 -std=c++0x -pg -D_DEBUG -g -c -Wall


4 commentaires

Si vous écrivez cflags + = ... L'utilisateur peut donner ses propres cflags avec cflags = "..." faire


@Floriansoade Great, ajouté que à la réponse;)


Florian: Ce n'est pas vrai. Affectations variables sur les paramètres de remplacement de la ligne de commande dans le maquillage complètement, même + = paramètres de style. Le meilleur moyen (et le plus portable) de gérer cela est d'utiliser une variable différente pour les drapeaux internes et de laisser cflags / cxxflags pour la personne invoquant la marque.


+1 pour CXXFLAGS ! Cette chose funky m'a foncé dans un état de foncusion #notypo



3
votes

Vous pouvez le garder dans plusieurs lignes, mais vous voulez probablement appendez , pas à Attribuer : xxx


0 commentaires

0
votes

Où avez-vous reçu ce gâchis? Ce fabricant était faux bien avant de le modifier pour C ++ 11.

Commençons par la première ligne: P> xxx pré>

Essayez d'exécuter la commande echo `Uname -s`-`uname -m` code> et vous verrez si aucun espaces dans de toute façon, quel est le point dans la commande sed code>? p>

Peut-être que vous vouloir ceci: p> xxx pré>

qui exécute seulement deux processus (uname et sed) non pas quatre (deux noms, echo et SED) p>

si vous utilisez GNU fait qu'il devrait être p> xxx pré>

donc il est seulement exécuté une seule fois. P> xxx pré>

Qu'est-ce que cc code >? P>

print-vars:
        echo CFLAGS is $(CFLAGS)
        echo LDFLAGS is $(LDFLAGS)


1 commentaires

Merci pour la réponse. C'est une énorme base de code héritée, et je n'ai pas vraiment pris la peine de modifier le maquillage jusqu'à présent que je devais activer C ++ 11. J'ai corrigé le problème des drapeaux écrasants comme indiqué dans mon édition.