2017-12-29 63 views
1

Ich versuche eine plattformübergreifende Bibliothek zu erstellen, die die APIs der verschiedenen Plattformen verwendet. Ich mache gerade macOS und ich habe ein Problem, weil ich objective-c verwenden muss. dieseUmgang mit Implementierungen für verschiedene Plattformen

ich habe:

cc_library(
    name = "base", 
    hdrs = ["application.h"], 
    deps = [":base_mac"], 
    visibility = ["//visibility:public"], 
) 

objc_library(
    name = "base_mac", 
    srcs = ["application_mac.mm"], 
) 

In anderen Paketen, ich bin abhängig von base.

Das Problem ist, dass application_mac.mm umfasst application.h und setzt sie aber nicht kompilieren, weil die base_mac Regel nicht auf der base Regel abhängt und nicht seine Header verwenden. Es funktioniert auch nicht, um diese Abhängigkeit hinzuzufügen, denn dann haben wir einen Abhängigkeitszyklus und Bazel mag es nicht.

Also, wie kann ich dieses Problem am besten lösen?

Antwort

1

Zwei Lösungen:

  • entweder hinzufügen hdrs = ["application.h"] zu base_mac auch, oder
  • auf, dass sowohl von base und base_mac andere cc_library mit nur hdrs = ["application.h"], abhängig erstellen, und entfernen Sie die hdrs von base und base_mac
+0

Danke, ich endete nach Ihrem zweiten Vorschlag. –

Verwandte Themen