首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CMakeLists包含来自其他库的标头

使用CMakeLists包含来自其他库的标头
EN

Stack Overflow用户
提问于 2022-04-29 05:17:24
回答 1查看 34关注 0票数 0

我很难让我的一个库包含来自另一个库的头文件。

我的结构如下:

我希望在amber.common中引用amber.engine,既可以作为库,也可以访问头文件。

来自CMakeLists.txt的amber.common如下所示:

代码语言:javascript
复制
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,但如下所示:

代码语言:javascript
复制
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只定义子文件夹:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.0.0)
project(amber VERSION 0.1.0)

add_subdirectory(amber.common)
add_subdirectory(amber.engine)
EN

回答 1

Stack Overflow用户

发布于 2022-04-29 06:22:03

有不同的方法可以用来做你想做的事。当您的项目在不同的库中进行逻辑结构时,其中之一工作得很好,但实际上您不打算将项目外部的库作为独立的构件使用。在这种情况下,您可以在顶级CMake文件中添加以下内容:include_directories(.),然后将其包括在引擎中,如下所示:

代码语言:javascript
复制
#include "amber.common/core/amber_object.h"

它是冗长的,但它显示了包含从哪里来。

或者,您可以在amber.common中执行以下操作:

代码语言:javascript
复制
target_include_directories(amber.common PUBLIC .) 

然后在你的引擎里

代码语言:javascript
复制
target_link_libraries(amber.engine PRIVATE amber.common) 

您可以这样包括它:#include "core/amber_object.h"。使用第二种解决方案,您还可以包含core而不是.,然后只需通过#include "amber_object.h"来包含您的头。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72053141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档