J'utilise Google cpplint.py pour vérifier code source dans mon projet répond aux normes établies dans le Google C ++ Guide de style a >. Nous utilisons SCons à construire donc je voudrais automatiser le processus en ayant SCons première lecture dans toutes nos .h et les fichiers .cc et puis exécutez cpplint.py sur eux, la construction d'un seul fichier si elle passe. Les questions sont les suivantes: p>
3 Réponses :
addPreaction code> semble être ce que vous recherchez, à partir du MANPAGE:
AddPreAction(target, action)
env.AddPreAction(target, action)
Arranges for the specified action to be performed before the specified target is built. T
Pour que cela fonctionne, j'ai besoin de connaître la cible à l'avance. Comment puis-je obtenir une liste de tous les fichiers .cc / cpp / c et .h / hpp dans mon projet? J'ai aussi besoin d'exclure les en-têtes tels que le système et les en-têtes de boost.
@Jonathan, vous pouvez le faire avec un shellscript à deux lignes.
@ İsmail, il serait préférable d'utiliser les nœuds déjà collectés par mon script Scons. Je regarde les modules Scons.Action.Job & Scons.JOB et SCONS.JOD.JOOD. N'a pas évident où les constructions en attente sont la file d'attente.
Une façon de le faire est de patch de singe la fonction d'émetteur d'objet, qui active le code C ++ dans des fichiers d'objet liés. Il y a 2 fonctionnalités d'émetteur de ce type; un pour les objets statiques et un pour les objets partagés. Voici un exemple que vous pouvez copier coller dans un sconstrique: Il n'y a rien trop délicat à ce sujet. Vous auriez définir la peluche sur le chemin de votre CPPLint.py Copie et définissez appropriée Lint_OPTIONS pour votre projet. Le seul bit Warty crée un fichier cible si la vérification passe à l'aide de la ligne de commande Ajout d'une blancheur est maintenant juste un code Python régulier, quelque chose comme: p> Il semble que cpplint.py sortie le statut d'erreur correct. Lorsqu'il y a des erreurs, il retourne 1, sinon il retourne 0. Il n'y a donc pas de travail supplémentaire à faire là-bas. Si le chèque de peluche échoue, il échouera la construction. P> Cette solution fonctionne avec -j, mais les fichiers C ++ peuvent compiler car il n'y a pas de dépendances implicites entre la fausse sortie de la peluche et la cible de fichier d'objet. Vous pouvez ajouter un date code>. Si vous voulez être une plate-forme transversale, cela devra changer. P>
env.DePends explicite CODE> à la fois pour forcer que la sortie "Lint "dépend de la cible d'objet. Comme c'est probablement suffisant, car la construction elle-même échouera (SCONS donne un code de retour non nul) s'il existe des problèmes de peluche restants même après la compilation C ++. Pour l'exhaustivité, le code dépend de ce serait comme celui-ci dans la fonction Dolint: P>
def DoLint(env, source, target):
for i in range(len(source)):
s = source[i]
out = env.Lint(s.srcnode().path + ".lint", s)
env.Depends(target[i], out)
Voir mon GitHub pour une paire de scories scons complète avec un exemple d'arborescence source. Il utilise le CPplint.py de Google. P>
Bienvenue à Stackoverflow! Je viens de modifier votre message et j'ai supprimé votre introduction. Bien que cela signifiait certainement bien, les gens ici conservent la politique d'écrire uniquement des choses liées à la question.