How to write files to current directory instead of bazel-out

后端 未结 3 1293
伪装坚强ぢ
伪装坚强ぢ 2020-12-16 04:12

I have the following directory structure:

my_dir
|
 --> src
|    |
|     --> foo.cc
|     --> BUILD
|
 --> WORKSPACE
|
 --> bazel-out/ (symlin         


        
相关标签:
3条回答
  • 2020-12-16 04:35

    Bazel doesn't allow you to modify the state of your workspace, by design.

    The short answer is that you don't want the results of the past builds to modify the state of your workspace, hence potentially modifying the results of the future builds. It'll violate reproducibility if running Bazel multiple times on the same workspace results in different outputs.

    Given your example: imagine calling bazel run //src:foo which inserts

    #define true false
    #define false true
    

    at the top of the src/foo.cc. What happens if you call bazel run //src:foo again?

    The long answer: https://docs.bazel.build/versions/master/rule-challenges.html#assumption-aim-for-correctness-throughput-ease-of-use-latency

    Here's more information on the output directory: https://docs.bazel.build/versions/master/output_directories.html#documentation-of-the-current-bazel-output-directory-layout

    0 讨论(0)
  • 2020-12-16 04:42

    If you're passing the name of the output file in when running, you can simply use absolute paths. To make this easier, you can use the realpath utility if you're in linux. If you're on a mac, it is included in brew install coreutils. Then running it looks something like:

    bazel run my_app_dir:binary_target -- --output_file=`realpath relative/path/to.output
    
    0 讨论(0)
  • 2020-12-16 04:47

    There could be a workaround to use genrule. Below is an example that I use genrule to copy a file to the .git folder.

    genrule(
        name = "precommit",
        srcs = glob(["git/**"]),
        outs = ["precommit.txt"],
        # folder contain this BUILD.bazel file is tool which will be symbol linked, we use cd -P to get to the physical path
        cmd = "echo 'setup pre-commit.sh' > $(OUTS) && cd -P tools && ./path/to/your-script.sh",
        local = 1,  # required
    

    )

    0 讨论(0)
提交回复
热议问题