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
相关产品推荐
相关产品推荐

