gpt4 book ai didi

c++ - CMakeLists 包含子目录中的头文件

转载 作者:行者123 更新时间:2023-12-05 07:00:54 26 4
gpt4 key购买 nike

我是第一次尝试使用 CMake,并且正在努力将头文件链接到我的 main.h 文件中。我的 cmake 目录如下所示:

Project
| CmakeLists.txt
| src
|| CMakeLists.txt
|| Main.cpp
| Libs
|| CMakeLists.txt
|| headers
|||obstacle_detection.hpp
||source
|||obstacle_detection.cpp
|build
||"build files"

我想将 headers 文件夹中的文件链接到 main,但我目前拥有的文件似乎不起作用。以下正确运行 CMake 命令,但无法使用 make 命令进行编译,无法找到给定的头文件。我的 CMakeLists 文件如下:

项目:

cmake_minimum_required(VERSION 3.17)
project(Sensivision)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
find_package(OpenCV REQUIRED)
find_package(realsense2 REQUIRED)
find_library(darknet REQUIRED)
add_subdirectory(libs)
add_subdirectory(src)
target_link_libraries(${PROJECT_NAME} obstacle_detection)

图书馆:

add_library(
obstacle_detection
headers/obstacle_detection.hpp
sources/obstacle_detection.cpp
)


target_link_directories(obstacle_detection PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")

来源:

add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
target_link_libraries(${PROJECT_NAME} ${realsense2_LIBRARY})

我在 main.cpp 中包含的是

include <obstacle_detection.hpp>

我也试过

include <headers/obstacle_detection.hpp>

include <obstacle_detection>

每个都给出错误:

obstacle_detection.hpp: no such file or directory 

我在将标题链接到主体时做错了什么?

最佳答案

您还没有将任何包含目录添加到 obstacle_detection 库中。通过在 add_library 调用中列出头文件,这可能允许在 IDE 中显示头文件,但它不会为编译做任何事情。你应该使用 target_include_directoriesobstacle_detection 库添加 headers 目录作为 include 目录。否则,它和其他消费目标将不知道该目录中的 header 。

add_library(
obstacle_detection
headers/obstacle_detection.hpp
sources/obstacle_detection.cpp
)

# Add this line.
target_include_directories(obstacle_detection PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/headers)

# Not sure this line is necessary, as it doesn't appear you actually link anything...
target_link_directories(obstacle_detection PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")

您尚未在 src 目录中显示 CMake 代码,但请确保将 obstacle_detection 库目标链接到主目标,例如:

target_link_libraries(MyExeTarget PRIVATE obstacle_detection)

另外,因为这个头文件是本地的,所以最好使用引号来包含头文件:

#include "obstacle_detection.hpp"

关于c++ - CMakeLists 包含子目录中的头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63992429/

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