gpt4 book ai didi

c++ - 在 include 中找不到 CMake 头文件

转载 作者:太空宇宙 更新时间:2023-11-04 12:58:48 26 4
gpt4 key购买 nike

我有库 AprilTags,它使用 cmake top 构建它。

我有另一个项目 AIV,它使用 AprilTags。我想将 apriltags 库保留在 ~/aiv/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”目录下的内容。

如果您真的知道自己在做什么,您可以通过使用生成器表达式获得更细粒度的,但这并不是让它工作的必要条件。

关于c++ - 在 include 中找不到 CMake 头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45202048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com