2017-07-19 5 views
2

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)

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

Dois-je passer le réglage de la configuration manuellement alors? Ou y a-t-il une introspection du système? – Slava

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.