簡體   English   中英

使用Bazel構建系統構建具有循環依賴關系的C ++代碼

[英]Build C++ code with Circular dependency using Bazel Build System

在尋找可以處理多種語言並以增量方式構建代碼的構建系統時,我發現Bazel是一個很好的解決方案。 但是,有一個我沒有解決方案的問題。

我有循環依賴的C ++代碼。 在解決之前,我需要一個可以構建此類代碼的構建系統。 我的問題是,Bazel可以構建具有循環依賴性的代碼,尤其是C ++代碼嗎? 如果是,可以有人分享相同的准則或有用的鏈接嗎?

這取決於循環依賴的外觀。

  1. 兩個.cc文件依賴於彼此的.h文件

    可以將.cc和.h文件放入相同的cc_library規則中,或者對.h文件使用僅標頭的規則,並使.cc文件的cc_library取決於相應的其他cc_library。

  2. #彼此包含的兩個.h文件

    這些都需要位於相同的cc_library中,Bazel才能處理它。

    另外,如果您有包含防護,則可以這樣重構:假設文件分別為ah和bh您將bh重命名為b-impl.h,從b-impl.h中刪除了ah的#include,然后添加一個新的文件bh,其中包含#include ah,這將使包含順序始終保持一致,並在很大程度上向后兼容的同時刪除循環(只要它們不嘗試聲明相同的符號且包括它們的代碼都依賴於命令)。

  3. #互相包含的兩個.cc文件

    嗯...我希望那不是你的情況。

  4. 兩個具有相互符號引用的.a文件

    這通常是通過--start-group aa ba --end-group處理的,但是Bazel中目前沒有任何機制。 參見https://github.com/bazelbuild/bazel/issues/818

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM