12
votes

Comment forcer la sortie SCONS (EXE, OBJ, LIB & DLL) à un répertoire de construction spécifique?

J'essaie d'obtenir des scoys de produire des fichiers EXE, Obj, Lib et DLL à un répertoire de construction spécifique.

Ma structure de fichier ressemble à ceci: xxx

essentiellement, ce que je reçois maintenant est que mon répertoire source est pollué par les fichiers OBJ. Je préférerais tout avoir au même endroit.

Le fichier de sconstructeur ressemble à ceci: xxx


0 commentaires

4 Réponses :


3
votes

le variantedir (également décrit dans le < un href = "http://www.scons.org/doc/production/html/scons-user/c3340.html" rel = "NOFOollow NOREFERRER"> Guide de l'utilisateur ) indique aux scons de mettre des fichiers générés dans un Répertoire séparé. Dans les anciennes versions de Scons, cette fonction a été nommée builddir .

Vous pouvez également vouloir lire pour éviter la duplication du répertoire source (décrit à la fois dans le Guide de l'utilisateur et sur le wiki).


2 commentaires

Oui, c'est ce que j'ai essayé: env.variartdir ('Construire', 'Source', Dupliquer = 0) env.Program ('Hiérarchie', Source = ['Source / Sconsest.Cpp', 'Source / Utils / Inttil.cpp ']) Et cela n'a absolument aucun effet sur tout :(


Le fichier à compiler ne doit pas être dans la source mais de la construction dossier: env.program ('hierarchy', source = ['Construire / sconstest.cpp', 'Construire / Utils / intutil.cpp'])



10
votes

Le moyen le plus simple que j'ai trouvé est d'utiliser 2 fichiers, d'un fichier de sconstructeur et d'un sconstronomère séparé.

Dans l'accause, vous appelez simplement l'autre fichier et spécifiez le répertoire de la sortie de construction: P> xxx pré>

puis dans "Main.Scons" Vous faites la viande de votre construction. Vous pouvez oublier les répertoires de variantes dans ce fichier. P>

# content of main.scons
env = Environment()
env.Program('Hierarchy',
            source = ['source/sconstest.cpp', 'source/utils/IntUtil.cpp'])


1 commentaires

Merci, ça a fonctionné. Bien que juste avoir un fichier est beaucoup plus propre. Je pense que je vais juste devoir vivre avec ça!



7
votes

Ce n'est pas si difficile d'obtenir VariantDir de travailler à l'aide d'un seul fichier de sconstrique (pour un petit projet), mais c'est très em> déroutant car la configuration est différente pour le cas d'un fichier et de deux fichiers. .

Seulement Sconstructeur: p>

env = Environment()
env.VariantDir('build', 'src', duplicate=0)
files = Glob('build\*.c')
env.Program("build\program", files)


0 commentaires

1
votes

J'utilisais une méthode à deux feux comme la réponse de Richq, mais bien que les produits de construction finaux (LIBS, programmes) entraient dans le répertoire de variante de droite, les fichiers d'objet se rendaient toujours dans le répertoire source.

La solution s'est avéré être pour gérer les fichiers source par chemin relatif au lieu d'absolu. Je ne sais pas pourquoi. P>

Mon deuxième fichier Scons ressemblait à l'origine de cela. Remarque Globbing Par Chemin absolu - Quand j'ai écrit pour la première fois, je n'ai pas réalisé que les chemins seraient automatiquement relativement au fichier SCONS. P>

env = Environment()
src = Glob("src/*/*.c*", strings=True, source=True) 
env.Program('Foo', source = src)


2 commentaires

La raison pour laquelle vos fichiers intermédiaires se terminent dans le répertoire source sont parce que vous les demandiez de là. Si vous leur demandez de la variante DIR, ou un dirratif dir, des scons rempliront les sources de la variante, puis produirez la sortie là-bas. (Bien sûr, si vous demandez à Variant Dir de ne pas copier, il ne copiera pas les sources, mais ne produira pas les fichiers de sortie dans la variante DIR)


Aha, ça fait un peu plus de sens. Merci pour l'indice!