2017-09-09 2 views
1

Ich versuche, diese Header-Dateien zu importieren:Bazel- Ausgabe Import Header-Dateien

AffdexException.h Detector.h FaceListener.h Frame.h   
PhotoDetector.h   typedefs.h 
CameraDetector.h Face.h  FrameDetector.h ImageListener.h 
ProcessStatusListener.h VideoDetector.h 

Sie werden unter dem/root/affdex-sdk gelegen/umfassen. Hier ist, wie meine Basis-WORKSPACE-Datei aussieht:

new_local_repository(
    name = "Boost", 
    path = "/usr/local/lib/", 
    build_file = "/usr/local/lib/BUILD.boost", 
) 

new_local_repository(
    name = "OpenCV", 
    path = "/usr/lib/x86_64-linux-gnu/", 
    build_file = "/usr/lib/x86_64-linux-gnu/BUILD.opencv", 
) 

new_local_repository(
    name = "AffdexSDK", 
    path = "/root/affdex-sdk/", 
    build_file = "/root/affdex-sdk/BUILD.affectiva", 
) 

Das Problem ist mit den Headerdateien AffdexSDK. Hier ist meine BUILD.affectiva:

package(default_visibility = ["//visibility:public"]) 

cc_library(
    name = "affdex-sdk", 
    srcs = glob(["**/*.so"]), 
    hdrs = glob(["**/*.h"]), 
) 

und die BUILD-Datei mit meinem Hauptziel ich in ein binäres machen wollen:

cc_binary(
    name = "video-detector", 
    srcs = ["vidDetector.cpp", "include/VideoDetector.h"], 
    deps = ["@AffdexSDK//:affdex-sdk", 
      "@Boost//:boost", 
      "@OpenCV//:opencv", 
    ], 
    includes = [":affdex-sdk/include/"], 
) 

Und die Erklärungen für die Hauptquellcodedatei muss ich kompilieren :

#include <iostream> 
#include <memory> 
#include <chrono> 
#include <fstream> 

#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 
#include <boost/filesystem.hpp> 
#include <boost/timer/timer.hpp> 
#include <boost/program_options.hpp> 

#include </root/affdex-sdk/include/VideoDetector.h> 
#include </root/affdex-sdk/include/PhotoDetector.h> 
#include </root/affdex-sdk/include/AffdexException.h> 

#include "/root/sdk-samples/common/PlottingImageListener.hpp" 
#include "/root/sdk-samples/common/StatusListener.hpp" 

Und wenn ich den Befehl bazel build // affdex-sdk laufen: Video-Detektor --verbose_failures:

ich diesen Fehler:

ERROR:/root/affdex-sdk/BUILD: 1: 1: nicht deklarierter Aufnahme (n) in der Regel '// affdex-sdk: Video-Detektor': diese Regel fehlt Abhängigkeit Erklärungen für die folgenden Dateien von ‚affdex-sdk/vidDetector.cpp‘ enthalten:

'/root/affdex-sdk/include/VideoDetector.h' 
    '/root/affdex-sdk/include/FrameDetector.h' 
    '/root/affdex-sdk/include/Detector.h' 
    '/root/affdex-sdk/include/typedefs.h' 
    '/root/affdex-sdk/include/ImageListener.h' 
    '/root/affdex-sdk/include/Face.h' 
    '/root/affdex-sdk/include/Frame.h' 
    '/root/affdex-sdk/include/FaceListener.h' 
    '/root/affdex-sdk/include/ProcessStatusListener.h' 
    '/root/affdex-sdk/include/AffdexException.h' 
    '/root/affdex-sdk/include/PhotoDetector.h' 
    '/root/sdk-samples/common/PlottingImageListener.hpp' 
    '/root/sdk-samples/common/StatusListener.hpp' 

So bin ich nicht sicher, warum diese nicht enthalten sind, weil ich diese Header-Dateien über glob in BUILD.affectiva bin immer. Ich habe absolute Pfade in der Deklaration für vidDetector.cpp verwendet, weil sie sonst nicht abgerufen wurden. Ich bin nicht sicher, wie man die sdk-samples/allgemeine hpp-Dateien einschließt, aber ich würde annehmen, dass die anderen Headerdateien in affdex-sdk über glob in BUILD.affectiva enthalten werden. Bitte hilf mir.

Antwort

0

Im Allgemeinen ist die nette Art, solche Probleme zu debuggen, zu sehen, was in Ihre Sandbox kopiert wird. Es gibt eine blog post zum Thema.

Nun zu Ihrem speziellen Problem, ich denke, Sie sollten includes Attribut an die @AffdexSDK//:affdex-sdk Regel und entfernen Sie es aus :video-detector. Dann sollten Sie in der Lage sein, die Header relativ zu ihrem Include-Verzeichnis zu referenzieren, z. #include <Detector.h>.

Sie können auch die Attribute strip_include_prefix und include_prefix verwenden, um den Includes-Pfad nach Ihren Wünschen zu optimieren.