Je suis en train de construire l'application C++ avec glut en utilisant bazel. Cela devrait fonctionner à la fois sur macos et sur linux. Maintenant, le problème est que sur macos, il faut passer "-framework OpenGL", "-framework GLUT"
aux indicateurs de liaison, alors que sur Linux, je devrais probablement faire quelque chose comme cc_library( name = "glut", srcs = glob(["local/lib/libglut*.dylib", "lib/libglut*.so"]), ...
dans glut.BUILD. Donc, la question est 1. Comment fournir des options d'éditeur de liens dépendant de la plateforme aux règles cc_library en général? 2. Et en particulier comment lier à glutter de manière indépendante de la plate-forme en utilisant bazel?drapeaux de lien dépendants de plate-forme dans bazel (pour la surabondance)
2
A
Répondre
3
Vous pouvez le faire en utilisant la fonction Bazel select(). Quelque chose comme cela pourrait fonctionner:
config_setting(
name = "linux_x86_64",
values = {"cpu": "k8"},
visibility = ["//visibility:public"],
)
config_setting(
name = "darwin_x86_64",
values = {"cpu": "darwin_x86_64"},
visibility = ["//visibility:public"],
)
cc_library(
name = "glut",
srcs = select({
":darwin_x86_64": [],
":linux_x86_64": glob(["local/lib/libglut*.dylib", "lib/libglut*.so"]),
}),
linkopts = select({
":darwin_x86_64": [
"-framework OpenGL",
"-framework GLUT"
],
":linux_x86_64": [],
})
...
)
déchaussé dans le dépôt Bazel github, il a obtenu quelques bons exemples du monde réel de l'utilisation de select().
0
J'ai eu un problème similaire mais en choisissant le bon compilateur en fonction de la plate-forme et la solution de @ zlalanne n'a pas fonctionné pour moi. Après 2 jours de frustration, j'ai finalement trouvé la solution suivante:
config_setting (
name = "darwin",
constraint_values = [ "@bazel_tools//platforms:osx" ]
)
config_setting (
name = "windows",
constraint_values = [ "@bazel_tools//platforms:windows" ]
)
Je n'ai pas besoin de linux
, mais en ajoutant ceci à votre fichier BUILD
devrait fonctionner:
config_setting (
name = "linux",
constraint_values = [ "@bazel_tools//platforms:linux" ]
)
Utilisez ":darwin"
, ":windows"
et ":linux"
dans votre select
s et vous devriez avoir une solution qui fonctionne.
Dois-je passer le réglage de la configuration manuellement alors? Ou y a-t-il une introspection du système? – Slava