CMake头文件没有被找到包括
问题描述:
我有库,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)
我在做什么错?
答
优选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”目录下的内容。
如果你真的知道你在做什么,你可以通过使用生成器表达式来获得更细致的效果,但在这里没有必要使它生效。
我可以告诉你,顶层'CMakeLists.txt'需要将'-I $ {top_srcdir}/apriltags'传递给编译器,但我不知道如何告诉cmake,而且我可能有不正确地拼写'$ {top_srcdir}'。 – zwol