CGC et en reliant les variables d'environnement et les drapeaux
Le lien suivant dans la documentation officielle pour GCC:
http://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html
Explique les variables d'environnement suivantes:
LANG
LC_CTYPE
LC_MESSAGES
LC_ALL
TMPDIR
GCC_COMPARE_DEBUG
GCC_EXEC_PREFIX
COMPILER_PATH
LIBRARY_PATH
CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
DEPENDENCIES_OUTPUT
SUNPRO_DEPENDENCIES
Mais j'ai aussi entendu/lu avant sur ces autres compiler flags:
- Pour compiler le code C:
CC
,CFLAGS
- Pour la compilation de code C++:
CXX
,CPPFLAGS
Et reliant les drapeaux:
- Pour l'étape de lien:
LDFLAGS
- Après le code est compilé:
LD_LIBRARY_PATH
Quel est le sens de CC
, CFLAGS
, CXX
, et CPPFLAGS
? Pourquoi ne sont-ils pas inclus dans le officiel liste des variables d'environnement pour gcc
?
Ils n'ont rien à voir avec GCC. Ils sont juste une sorte de convention sur Unix, et en conséquence sont pris en charge en famille d'Unix. Je suppose qu'ils sont devenus une convention en raison de la plaine-vieux makefiles par convention tendance à s'appuyer sur ces variables. De nombreux construire des systèmes (tels que les Autotools) a adopté la présente convention trop et utilisent les mêmes variables pour désigner les mêmes choses. Pour être honnête, ces drapeaux sont de vieux tas de merde (sauf peut-être
Oui @Haroogan. Vous êtes invités à formuler cela comme une réponse, puisque c'est déjà très instructif. Vous ne savez pas si je vais accepter quoi que ce soit encore depuis que je voudrais donner le fil un certain temps pour recueillir les réponses.
LD_LIBRARY_PATH
) me rappelant de 60 à chaque fois est de les rencontrer. Si vous utilisez un moderne à construire (ce qui devrait être), vous pouvez les oublier.LD_LIBRARY_PATH
est utilisé pour souligner les répertoires dans lesquels les bibliothèques partagées résident de sorte que les applications s'appuyant sur ces bibliothèques partagées puissent être correctement relié (dynamiquement) contre eux. Comme vous pouvez le voir à nouveau se rapporte pas au développement de logiciels et de ne pas GCC, mais est plutôt une fonctionnalité/concept de la façon dont Unix famille poignées de liaison dynamique, les chemins d'installation de composants logiciels, et de leur exécution. Si vous êtes satisfait avec ces commentaires, je peut les formuler une réponse. N'hésitez pas à demander plus.Oui @Haroogan. Vous êtes invités à formuler cela comme une réponse, puisque c'est déjà très instructif. Vous ne savez pas si je vais accepter quoi que ce soit encore depuis que je voudrais donner le fil un certain temps pour recueillir les réponses.
OriginalL'auteur Amelio Vazquez-Reina | 2013-04-16
Vous devez vous connecter pour publier un commentaire.
Pour commencer, toutes les variables que vous avez mentionné:
CC
,CFLAGS
,CXX
,CXXFLAGS
,LDFLAGS
,LD_LIBRARY_PATH
, sont issues du système d'exploitation Unix famille. Ces variables n'ont rien à voir avec GCC en premier lieu, c'est pourquoi vous voyez pas de trace dans les manuels.La seule variable (qui n'a pas de connexion directe avec GCC trop) d'entre elles est
LD_LIBRARY_PATH
. Vous trouverez probablement pour cette variable définie out-of-the-box sur tous les systèmes Unix. Ici, c'est le LD.(8) man-la page de Manuel du Programmeur Linux qui mentionneLD_LIBRARY_PATH
et de son but. Voici encore une extrait:Comme vous pouvez le voir
LD_LIBRARY_PATH
n'est rien, mais un système d'exploitation spécifique de la variable d'environnement pour le bon chargement des bibliothèques partagées. Windows est similaire à la variable d'environnement à cet égard:PATH
. Windows va scanner les répertoires listés lors de la recherche pour bibliothèque de liens dynamiques (DLL, un homologue de la SORTE sur Linux).Concernant le reste des variables (
CC
,CFLAGS
,CXX
,CXXFLAGS
,LDFLAGS
), vous voyez si souvent due à des raisons historiques. Depuis la montée en puissance d'Unix époque, logiciel projets ont été construits à l'aide de Faire (faites défiler vers le bas et regarder les exemples typiquesmakefile
s) — l'un des pionniers des outils de construction. Ces variables sont donc largement utilisés dansmakefile
s que finalement, ils sont devenus une sorte de convention (voir Les Règles Implicites, par exemple). C'est pourquoi, vous pouvez même les voir défini out-of-the-box, par exemple, sur Linux, et probablement pointant vers GCC (comme il est considéré comme le natif toolchain Linux).Pour conclure, le point est: ne pas rayer votre tête sur
CC
,CFLAGS
,CXX
,CXXFLAGS
,LDFLAGS
, et les amis, ils sont juste un souffle du passé.;)
BONUS
À l'aide de plain old Rendre directement à bâtir des logiciels d'aujourd'hui devient vite fastidieux et source d'erreurs. En conséquence, de nombreux sophistiqué système de construction des générateurs comme GNU Automake ou CMake ont été développés. En bref, leur but est de fournir (sans doute) plus lisible, facile à maintenir, et de haut niveau de la syntaxe pour définir arbitrairement complexe système de construction pour l'arbitraire d'un projet de logiciel pour être construit. Généralement, avant de réellement à la construction du projet, il s'agit de générer un natif système de build (qui pourrait aussi être représentée par un bon vieux
makefile
s, par exemple, pour des raisons de portabilité, mais pas nécessairement) de cette définition à l'aide de l'ensemble d'outils. Finalement, on a à construire le projet avec l'outil(s) correspondant au (native) système de construction (par exemple, Faire en cas de plain oldmakefile
s, mais pas nécessairement).Puisque vous posant ces questions, je pense que vous êtes sur le point de plonger dans natif de développement de logiciels en C ou C++. Si oui, je vous recommande fortement de vous procurer un moderne système de build (CMake serait ma recommandation personnelle) en premier lieu, de jouer avec lui, et d'apprendre à bien.
Vous êtes les bienvenus. Je sais combien difficile (ou impossible), il est à saisir tout ce qu'un seul coup pour les débutants dans le domaine de la programmation autochtone car il est tout simplement tellement de choses qui se passent autour de: compilation, de couplage, de construire des systèmes, de nouvelles normes linguistiques, la vieille langue des normes, des plates-formes, ∞... Et combien il est facile de suivre le mauvais chemin à droite depuis le début. Malheureusement, il est difficile de trouver utile et à jour de documents à lire. La seule façon est de chercher quelques conseils ici. Bonne chance avec vos projets d'avenir, quelles qu'elles soient.
Wow, je pense que ce thread avec votre réponse très moderne à construire des systèmes est aujourd'hui perdu. On dirait qu'il n'est pas disponible à partir du cache de Google, ni dans stackprinter.com... Si nous trouvons nulle part ailleurs, il faut juste ajouter le texte de cette réponse.
Aw, c'est vraiment regrettable. En tout cas, je pourrais écrire un meilleur tutoriel sur elle plus tard, et de pleinement développer ce sujet, fournir des exemples du monde réel. Je suis un peu occupé ces jours-ci, mais je vais certainement le faire un jour. Sûrement, je vais poster un lien ici.
Par ailleurs, il serait bien de voir comment certaines de ces solutions intègrent avec les "récemment"-introduit (Nov. 2012) GNU GUIX: gnu.org/software/guix (il serait bon de savoir vos pensées sur l'approche GNU GUIX a pris toute façon)
OriginalL'auteur Alexander Shukaev
En termes simples
CC
,CFLAGS
,LDFLAGS
etc sont gnu Makefile variables. Si elle est définie, elles seront utilisées par des règles implicites, même sans être mentionné dans les commandes/règlesOriginalL'auteur J.Greg