J’ai la structure de répertoire suivante:
my_dir | --> src | | | --> foo.cc | --> BUILD | --> WORKSPACE | --> bazel-out/ (symlink) | | ...
src/BUILD
contient le code suivant:
cc_binary( name = "foo", srcs = ["foo.cc"] )
Le fichier foo.cc
crée un fichier nommé bar.txt
la manière habituelle avec les utilitaires .
Cependant, lorsque bazel run //src:foo
Bazel avec bazel run //src:foo
le fichier bar.txt
est créé et placé dans bazel-out/darwin-fastbuild/bin/src/foo.runfiles/foo/bar.txt
au lieu de my_dir/src/bar.txt
, où se trouve la source d’origine.
J’ai essayé d’append un champ outs
à la règle foo
, mais Bazel s’est plaint que outs
ne soit pas un atsortingbut reconnu de cc_binary
.
J’ai également pensé créer une règle de groupe de filegroup
, mais il n’y a pas de champ deps
où je puisse déclarer foo
tant que dépendance de ces fichiers.
Comment puis-je m’assurer que les fichiers générés en exécutant la règle cc_binary
sont placés dans my_dir/src/bar.txt
au lieu de bazel-out/...
?
Bazel ne vous permet pas de modifier l’état de votre espace de travail, par conception.
La réponse courte est que vous ne voulez pas que les résultats des générations précédentes modifient l’état de votre espace de travail, donc potentiellement les résultats des futures générations. Cela ira à l’encontre de la reproductibilité si l’exécution de Bazel à plusieurs resockets sur le même espace de travail donne des résultats différents.
Étant donné votre exemple: imaginez que vous appelez bazel run //src:foo
qui insère
#define true false #define false true
au sumt de la src/foo.cc
Que se passe-t-il si vous appelez bazel run //src:foo
nouveau?
La réponse longue: https://docs.bazel.build/versions/master/rule-challenges.html#assumption-aim-for-correctness-throughput-ease -of – use – latency
Voici plus d’informations sur le répertoire de sortie: https://docs.bazel.build/versions/master/output_directories.html#documentation-of-the-current-bazel-output-directory-layout