Je souhaite que ma cible dépende d'une autre cible dont je ne connais pas le nom ou le chemin au moment où je spécifie ma cible dépendante. Je ne peux pas utiliser Depends
à un moment ultérieur lorsque la deuxième cible est connue pour certaines raisons.Rendre la cible dépendante de la future cible inconnue
Est-il possible de créer une sorte d'espace réservé que je peux définir plus tard? J'imagine quelque chose comme
target1 = <placeholder_of_some_sort>
target2 = Program(files + [target1])
# Set target1 later
target1 = Object(...)
Cela ne fonctionne pas, car scons recherche la dépendance de l'espace réservé.
EDIT:
L'exemple montre l'essence du problème que je suis en train de résoudre. En réalité, j'ai un système de construction grand et complexe avec des dizaines de fichiers SConscript appelant d'autres fichiers SConscript d'une manière hiérarchique. je générer une ou plusieurs cibles selon une certaine entrée de l'utilisateur:
for x in user_input:
targets.append(env.SConscript(daughter_sconscript))
Les cibles générées sont indépendants les uns des autres ... sauf pour un cas limite laid, où, selon une certaine entrée de l'utilisateur, l'un des appelle à l'un des fichiers filles SConscript génère un fichier objet supplémentaire, qui est ensuite utilisé dans un autre appel au même fichier SConscript fille.
L'ordre dans lequel les cibles sont générées dépend de l'entrée utilisateur (types d'utilisateurs scons 1 2 3
vs scons 3 2 1
), il est donc pas garanti que l'objet supplémentaire est décrit à SCons, alors que l'appel à la SConscript qui a besoin que cet objet est exécuté. Donc, je veux dire à Scons "Hey, je sais que cette cible va avoir besoin d'un fichier objet, mais il n'a pas encore été décrit".
Je pourrais hardcode un nom pour le fichier objet supplémentaire dans le fichier SConstruct:
extra_object = File("path")
for x in user_input:
targets.append(env.SConscript(daughter_sconscript, exports = {"extras": extra_object}))
Mais ce encombre mon SConstruct avec des détails. Je veux le garder le plus concentré possible, et laisser le sconscript de fille s'occuper du nom et du chemin.
Merci!
Si vous ne savez pas quel sera le fichier (nom) 'target1', comment pouvez-vous garantir une version reproductible? Pouvez-vous développer votre question et donner un exemple des étapes que vous exécuteriez dans un terminal pour votre processus de construction (simplifié)? Utiliser 'Object' dans votre exemple ci-dessus est un peu erroné, car la solution évidente serait de définir' target2' ** après ** 'target1'. Mais ce n'est pas ce que vous cherchez, je suppose? – dirkbaechle
Votre déclaration de programme est impaire .. Vous ne spécifiez aucune cible, juste des sources. S'il vous plaît corriger dans votre exemple. Devrait être Program ('nom du programme',). –
bdbaddog
@dirkbaechle J'ai un peu plus élaboré, merci! – Andak