首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个库与CMake连接起来

将两个库与CMake连接起来
EN

Stack Overflow用户
提问于 2020-04-08 23:47:16
回答 1查看 129关注 0票数 0

档案结构:

代码语言:javascript
复制
CMakeLists.txt
src/
    evolution.cpp
    evolution.h
    main.cpp
    helpers/
        disposable.h
    engine/
        game.h
        game.cpp

CMakeLists.txt:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.17)
project(evolution)

add_library(helpers
    src/helpers/disposable.h)
set_target_properties(helpers PROPERTIES LINKER_LANGUAGE CXX)

add_library(engine
    src/engine/game.h
    src/engine/game.cpp)

add_executable(evolution src/main.cpp)

target_link_libraries(evolution engine helpers)

Game类(game.h)继承自Diposable (disposable.h),但我无法在game.h文件中使用简单的#include "disposable.h"构建项目。

如何配置CMake,使engine库能够看到helpers库?

CMake错误:

代码语言:javascript
复制
[ 20%] Building CXX object CMakeFiles/engine.dir/src/engine/game.cpp.o
In file included from /home/shane/projects/evolution/src/engine/game.cpp:1:
/home/shane/projects/evolution/src/engine/game.h:4:10: fatal error: disposable.h: No such file or directory
    4 | #include "disposable.h"
      |          ^~~~~~~~~~~~~~
compilation terminated.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-09 06:46:40

向项目添加标头只会帮助IDE找到标头。它不会改变构建指令。相反,您需要将target_include_directories()INTERFACEPUBLIC部分一起使用,以获取链接到该部分的任何库,从而将包含目录添加到自身。

目前,您的帮助程序库更像是一个接口。要使这个最小的示例正常工作,请执行以下操作:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.17)
project(evolution)

add_library(helpers INTERFACE) # INTERFACE is good for header-only libraries
target_include_directories(helpers INTERFACE src/helpers) 

add_library(engine
    src/engine/game.h
    src/engine/game.cpp)

add_executable(evolution src/main.cpp)

target_link_libraries(evolution engine helpers)

现在包含角括号:#include <disposable.h>

如果您的库变得更复杂(不仅仅是头文件),那么用源替换INTERFACE中的add_library。要使helpers库和链接到它的任何库都可以使用目录,请将INTERFACE更改为target_include_directories中的PUBLIC

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.17)
project(evolution)

add_library(helpers src/helpers/helper.cpp)
target_include_directories(helpers PUBLIC src/helpers)

add_library(engine
    src/engine/game.h
    src/engine/game.cpp)

add_executable(evolution src/main.cpp)

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

https://stackoverflow.com/questions/61111799

复制
相关文章

相似问题

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