2017-07-19 1 views
1

Ich habe Bibliothek, AprilTags, die CMake verwendet Top erstellen.CMake Header-Dateien, die nicht in enthalten sind

Ich habe ein anderes Projekt AIV, das AprilTags verwendet. Ich möchte die Apriltags-Bibliothek innerhalb von ~/aiv/apriltags behalten, habe aber eine andere Datei, front_back_camera_demo, die einige der Dateien in der AprilTags-Bibliothek verwendet.

So ist die Dateistruktur sieht aus wie

~/aiv/build/ 
    /apriltags/CMakeLists.txt 
    /apriltags/AprilTags/TagDetector.h 
    /apriltags/AprilTags/*.h 
    /front_back_camera_demo.cpp 
    /CMakeLists.txt 

Als ich Cmake auf der obersten Ebene CMakeLists.txt laufen, ist es die Bibliothek AprilTags baut erfolgreich, aber dann bekomme ich eine

front_back_camera_demo.cpp:72:35: fatal error: AprilTags/TagDetector.h: No such file or directory

Fehler auf die Linie, wo ich AprilTags/TagDetector.h

Hier sind die beiden relevanten CMakeLists.txt sind:

Top Level:

cmake_minimum_required(VERSION 2.6) 

project(AIV) 

add_subdirectory(apriltags) 
add_executable(front_back_camera_demo front_back_camera_demo.cpp 
Serial.cpp) 
target_link_libraries(front_back_camera_demo apriltags) 

Innen apriltags:

cmake_minimum_required(VERSION 2.6) 
project(apriltags) 

#add_definitions(-pg) #"-fopenmp) 

# pull in the pods macros. See cmake/pods.cmake for documentation 
set(POD_NAME apriltags) 
include(cmake/pods.cmake) 

file(GLOB SOURCE_FILES "src/*.cc") 
include_directories(AprilTags . /opt/local/include) 
add_library(apriltags ${SOURCE_FILES}) 

find_package(OpenCV) 
include_directories(${OpenCV_INCLUDE_DIRS}) 
target_link_libraries(apriltags ${OpenCV_LIBS}) #-pg) #-fopenmp) 
pods_use_pkg_config_packages(apriltags eigen3) 

if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") 
    target_link_libraries(apriltags -L/opt/local/lib/) # MacPorts 
special treatment... 
else (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") 
    pods_use_pkg_config_packages(apriltags libv4l2) 
endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") 

pods_install_libraries(apriltags) 

file(GLOB header_files "AprilTags/*.h") 
pods_install_headers(${header_files} DESTINATION AprilTags/) 

pods_install_pkg_config_file(apriltags 
    LIBS -lapriltags 
    REQUIRES eigen3 opencv2 
    VERSION 1.0.0) 

add_subdirectory(example) 

Was mache ich falsch?

+0

Ich kann Ihnen sagen, dass die 'CMakeLists.txt' auf oberster Ebene' -I $ {top_srcdir}/apriltags' an den Compiler übergeben muss, aber ich weiß nicht, wie ich CMake sagen soll, und das kann ich auch haben '$ {top_srcdir} 'falsch geschrieben. – zwol

Antwort

0

Bevorzugen Sie die target_* Befehle.

apriltags/CMakeLists.txt: " ""."

target_include_directories(apriltags 
    PUBLIC 
    "${CMAKE_CURRENT_SOURCE_DIR}" 
    PRIVATE 
    "${CMAKE_CURRENT_SOURCE_DIR}/AprilTags" 
    /opt/local/include) 

, der sagt, alles, was das apriltags Ziel jeder enthält in für den Zugriff auf in der Lage, verwendet, dass apriltags auch verwenden können, und nur apriltags selbst verwendet Inhalte in den Verzeichnissen "AprilTags" und "/ opt/local/include".

Wenn Sie wirklich wissen, was Sie tun, können Sie mithilfe von Generatorausdrücken noch feiner arbeiten, aber das ist hier nicht notwendig, damit es funktioniert.

Verwandte Themen