You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake链接accident库时头文件无法找到的问题求助

问题描述

我的项目目录结构如下:

scales/
├── src/
│   ├── CMakeLists.txt
│   └── note/
│       ├── CMakeLists.txt
│       ├── accident/
│       │   ├── CMakeLists.txt
│       │   ├── include/
│       │   │   └── accident.hpp
│       │   ├── src/
│       │   │   └── accident.cpp
│       │   └── test/
│       └── note/
│           ├── CMakeLists.txt
│           ├── include/
│           │   └── music_note.hpp
│           ├── src/
│           │   └── music_note.cpp
│           └── test/
├── external/
├── test/
└── CMakeLists.txt

我实现了一个作为独立库的accident组件,它的CMake配置如下:

set (ACCIDENT accident)
file (GLOB SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
file (GLOB HEADER_FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp")
add_library (${ACCIDENT} STATIC ${HEADER_FILES} ${SOURCE_FILES})
target_include_directories (${ACCIDENT} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
add_subdirectory (test)

这个库本身运行正常。现在我想在note组件里使用这个库,希望不用写#include "../../accident/include/accident.hpp"这种相对路径,就能让IDE识别accident.hpp头文件,同时能调用accident.cpp里的代码。我尝试的note组件CMake配置如下:

set (MUSIC_NOTE music_note)
file (GLOB SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
file (GLOB HEADER_FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp")

add_library (${MUSIC_NOTE} STATIC ${HEADER_FILES} ${SOURCE_FILES})
target_include_directories (${MUSIC_NOTE}
    PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include"
    PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../accident/include"
)
target_link_libraries (${MUSIC_NOTE} accident)
add_subdirectory (test)

但这个配置无效,找不到accident.hpp头文件,请问我哪里错了?


补充信息

顶层CMakeLists.txt

cmake_minimum_required (VERSION 3.5)
set (CMAKE_BUILD_TYPE Debug)

set (PROJECT_NAME scales)
project (${PROJECT_NAME} LANGUAGES CXX)
set (CMAKE_CXX_STANDARD 17)
set (CMAKE_CXX_STANDARD_REQUIRED ON)

set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)

set (CMAKE_MODULE_PATH "${CMAKE_BINARY_DIR}" "${CMAKE_MODULE_PATH}")

set (CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}" "${CMAKE_PREFIX_PATH}")

add_subdirectory (src)
add_subdirectory (external)

option (BUILD_TESTS "Build tests" ON)
enable_testing ()

if (BUILD_TESTS)
    add_subdirectory (test)
endif ()

# Add google test
include (FetchContent)
FetchContent_Declare (
  googletest
  GIT_REPOSITORY https://github.com/google/googletest.git
  GIT_TAG release-1.12.1
)

src目录下的CMakeLists.txt

add_subdirectory (note)

note目录下的顶层CMakeLists.txt

add_subdirectory (accident)
add_subdirectory (note)

问题已解决

问题已解决——参考下方Ave Milia的评论。感谢!


内容的提问来源于stack exchange,提问作者NiklasMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:54:53