Comment écrire des fichiers dans le répertoire courant au lieu de bazel-out

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