首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake target_link_libraries公共继承

CMake target_link_libraries公共继承
EN

Stack Overflow用户
提问于 2022-06-22 20:05:52
回答 1查看 145关注 0票数 0

我正在对CMakeLists.txt of implot图书馆进行教育。imgui库是implot所基于的库,它声明链接库为PUBLIC类型,如下所示。

代码语言:javascript
复制
# ...

add_library(imgui ${IMGUI_HEADERS} ${IMGUI_SRC})
if(MSVC)
  target_compile_options(imgui PRIVATE /W4 /WX /arch:AVX2 /fp:fast)
endif()
target_link_libraries(imgui PUBLIC glfw glad OpenGL::GL imm32)
target_compile_definitions(imgui PRIVATE IMGUI_DLL_EXPORT)

# ...

add_library(implot ${IMPLOT_HEADERS} ${IMPLOT_SRC})
target_link_libraries(implot PUBLIC imgui)
target_compile_definitions(implot PUBLIC IMPLOT_DEBUG IMPLOT_DLL_EXPORT IMPLOT_BACKEND_ENABLE_OPENGL3 IMGUI_IMPL_OPENGL_LOADER_GLAD)
set_property(TARGET implot PROPERTY CXX_STANDARD 11)
if(MSVC)
  target_compile_options(implot PRIVATE /W4 /WX /arch:AVX2 /fp:fast /permissive-) 
else()
  target_compile_options(implot PRIVATE -Wall -Wextra -pedantic -Werror -mavx2 -Ofast)
endif()

既然imgui是针对glfwgladOpenGL::GLimm32链接的,这是否意味着implot和使用implot的人也将被PUBLIC地链接到glfwgladOpenGL::GLimm32

这是因为imgui是一个共享库吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-22 21:37:22

由于imgui是针对glfw连接的,因此,PUBLICly::GL,imm32,这是否意味着内隐和使用implot的人也将PUBLICly链接到glfw,PUBLICly::GL,imm32?

是的,是这样的。更多细节可以在构建规范和使用要求一节的正式文档中找到。

这背后的原因是因为imgui是一个共享库吗?

是的,是这样的。由于add_library()没有任何SHAREDSTATIC命名参数,用户可以通过提供-DBUILD_SHARED_LIBS:BOOL=OFF cmake(1)参数来静态地构建它。因此,要链接到它,链接器需要所有的依赖项列表。这是一个很好的做法,让他选择如何构建你的项目;-)

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

https://stackoverflow.com/questions/72721399

复制
相关文章

相似问题

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