我很难让我的一个库包含来自另一个库的头文件。
我的结构如下:

我希望在amber.common中引用amber.engine,既可以作为库,也可以访问头文件。
来自CMakeLists.txt的amber.common如下所示:
cmake_minimum_required(VERSION 3.0.0)
project(amber.common VERSION 0.1.0)
include(CTest)
enable_testing()
add_library(amber.common
core/amber_object.cpp
concurrency/thread_lock.cpp
debugging/stopwatch.cpp
environment/environment.cpp
events/event_handler.cpp
logging/amber_logging.cpp
memory/amber_memory.cpp
parsers/parser.cpp
parsers/xml_parser.cpp
strings/string_converter.cpp
strings/string_helper.cpp)
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)虽然CMakeLists.txt来自amber.engine,但如下所示:
cmake_minimum_required(VERSION 3.0.0)
project(amber.engine VERSION 0.1.0)
include(CTest)
enable_testing()
add_library(amber.engine
core/amber_configuration.cpp
core/window.cpp)
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)在amber.engine中,我有一个名为window.h的文件,它包含来自amber.common的一个名为amber_object.h的文件,但是有一个错误告诉我它找不到这个文件。

我正试图从逻辑上思考如何让这件事发挥作用,但似乎解决方案并不合乎逻辑。我怎么才能让这一切成为可能?
编辑:
顶层CMakeLists.txt只定义子文件夹:
cmake_minimum_required(VERSION 3.0.0)
project(amber VERSION 0.1.0)
add_subdirectory(amber.common)
add_subdirectory(amber.engine)发布于 2022-04-29 06:22:03
有不同的方法可以用来做你想做的事。当您的项目在不同的库中进行逻辑结构时,其中之一工作得很好,但实际上您不打算将项目外部的库作为独立的构件使用。在这种情况下,您可以在顶级CMake文件中添加以下内容:include_directories(.),然后将其包括在引擎中,如下所示:
#include "amber.common/core/amber_object.h"它是冗长的,但它显示了包含从哪里来。
或者,您可以在amber.common中执行以下操作:
target_include_directories(amber.common PUBLIC .) 然后在你的引擎里
target_link_libraries(amber.engine PRIVATE amber.common) 您可以这样包括它:#include "core/amber_object.h"。使用第二种解决方案,您还可以包含core而不是.,然后只需通过#include "amber_object.h"来包含您的头。
https://stackoverflow.com/questions/72053141
复制相似问题