Ваша проблема, вероятно, очень простая, она связана с пространствами имен и / или расширяющимися классами.
c не имеет пространств имен по определению, но их можно эмулировать каким-либо образом:
https://stackoverflow.com/a/28535585/1019850
Но так как вы, вероятно, используете c ++, а не c, пространства имен можно использовать напрямую.
Конкретная проблема состоит в том, что у вас два раза одна и та же функция, которая будет выражаться в пространствах имен a.some_function()
и b.some_function()
.
В Bazel есть несколько способов ее решения, я публикую только короткие скопированные фрагменты, подробности, которые вы должны прочитать на связанных страницах.
deps = [
"@gtest//:main",
"//lib:hello-greet",
],
Ссылка: https://docs.bazel.build/versions/master/cpp-use-cases.html
Там фрагмент используется и для тестов, но я думаю, что это не важно в связи с вашей проблемой.
Тогда в Bazel есть наборы инструментов, вот пример:
config_setting(
name = "on_linux",
constraint_values = [
"@bazel_tools//platforms:linux",
],
)
config_setting(
name = "on_windows",
constraint_values = [
"@bazel_tools//platforms:windows",
],
)
bar_binary(
name = "myprog",
srcs = ["mysrc.bar"],
compiler = select({
":on_linux": "//bar_tools:barc_linux",
":on_windows": "//bar_tools:barc_windows",
}),
)
Ссылка: https://docs.bazel.build/versions/master/toolchains.html
Поскольку я не программирую на c или c ++, обычно мне требуется довольно много времени, чтобы выкопать в нем достаточно, чтобы опубликовать решение, поэтому я должен оставить его без настоящегорешение, но я надеюсь, что проблемаm, и способ ее решения стал немного яснее.
Я бы попробовал сначала со второй ссылкой, под первым фрагментом выше.