3 Réponses :


2
votes

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


3 commentaires

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.



2
votes

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: xxx pré>

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 date code>. Si vous voulez être une plate-forme transversale, cela devra changer. P>

Ajout d'une blancheur est maintenant juste un code Python régulier, quelque chose comme: p> xxx pré>

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 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)


0 commentaires

1
votes

Voir mon GitHub pour une paire de scories scons complète avec un exemple d'arborescence source. Il utilise le CPplint.py de Google.

https://github.com/xyzisinus/scons-tidbits


1 commentaires

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.