2017-07-09 1 views
1

J'ai une règle objc_library qui me dit qu'elle ne trouve pas d'en-tête de framework SDK (ce problème n'est pas spécifique à IOKit, je ne trouve aucun framework du tout).Où bazel cherche-t-il les SDK OSX (et que faire s'il ne les trouve pas)?

#import <IOKit/IOKitLib.h> 

erreur fatale: 'IOKit/IOKitLib.h' fichier non trouvé

J'ai déjà "IOKit" dans mes sdk_frameworks. Si je jette un coup d'oeil dans /System/Library/Frameworks/IOKit.framework, je trouve qu'il n'y a pas de répertoire Headers qui contiendrait ce fichier. Peut-être pas de surprise si c'est là que Bazel regarde.

Si je regarde un peu plus fort, je trouve plus de résultats pour le SDK. Je pense que c'est celui que je veux, puisque je suis en train de développer pour Mac OS X. Puis-je dire à Bazel d'utiliser ce SDK?

/Applications/Xcode.app//Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/IOKit.framework 

Devrais-je devoir? Comment puis-je savoir où Bazel cherche ces choses? Je suis assez familier avec l'utilisation de Bazel, mais je ne sais vraiment pas comment déboguer lorsque les choses les plus élémentaires échouent.

Voici l'exemple le plus simple qui échoue.

BUILD:

objc_library(
    name = "test", 
    srcs = ["test.cpp"], 
    copts = ["-ObjC++"], 
    sdk_frameworks = ["IOKit"], 
) 

// test.cpp

#import <IOKit/IOKitLib.h> 

J'ai posté ceci sur Bazel-discuter, mais il ne reçoit pas beaucoup de traction. J'utilise Bazel 0.5.2. https://groups.google.com/forum/#!topic/bazel-discuss/HhAjKblwHwk

Répondre

1

Résolue dans le fil de Bazel-discuter, mais je vais résumer ici:

La question que vous trouvez ici est très probablement parce que IOKit est un MacOS uniquement SDK, et vous construisez cette bibliothèque pour iPhoneSimulator. (je pense que le premier est le cas, il semble qu'il y ait en effet un répertoire IOKit.framework sous iPhoneSimulator9.3.sdk, mais il n'inclut pas les en-têtes - je ne suis pas sûr de savoir à quoi ça sert

Construire correctement la bibliothèque pour MacOS est la clé ici et devrait résoudre vos problèmes. Vous pouvez soit faire cela en fonction de cette bibliothèque via un apple_binary avec platform_type="macos", ou vous pouvez adapter les drapeaux de ligne de commande à cette fin. Je crois que --apple_platform_type=macos --cpu=darwin_x86_64 devrait faire l'affaire