2017-07-19 60 views
1

我有庫,AprilTags,它使用cmake頂級構建它。CMake頭文件沒有被找到包括

我有另一個項目AIV,使用AprilTags。我想保留〜/ aiv/apriltags中的apriltags庫,但有另一個文件,front_back_camera_demo使用AprilTags庫中的一些文件。

所以文件結構看起來像

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

當我在頂層的CMakeLists.txt運行cmake,它成功地構建了AprilTags庫,但然後我得到一個

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

錯誤我包含的行AprilTags/TagDetector.h

以下是兩個相關的CMakeLists.txt:

頂級:

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) 

內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) 

我在做什麼錯?

+0

我可以告訴你,頂層'CMakeLists.txt'需要將'-I $ {top_srcdir}/apriltags'傳遞給編譯器,但我不知道如何告訴cmake,而且我可能有不正確地拼寫'$ {top_srcdir}'。 – zwol

回答

0

優選target_*命令。

apriltags /的CMakeLists.txt: 「 」

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

,說,一切使用apriltags目標將能夠訪問任何包含,即apriltags也可以使用「。」並且只有apriltags本身使用「AprilTags」和「/ opt/local/include」目錄下的內容。

如果你真的知道你在做什麼,你可以通過使用生成器表達式來獲得更細緻的效果,但在這裏沒有必要使它生效。