我正在对CMakeLists.txt of implot图书馆进行教育。imgui库是implot所基于的库,它声明链接库为PUBLIC类型,如下所示。
# ...
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是针对glfw、glad、OpenGL::GL、imm32链接的,这是否意味着implot和使用implot的人也将被PUBLIC地链接到glfw、glad、OpenGL::GL、imm32
这是因为imgui是一个共享库吗?
发布于 2022-06-22 21:37:22
由于imgui是针对glfw连接的,因此,PUBLICly::GL,imm32,这是否意味着内隐和使用implot的人也将PUBLICly链接到glfw,PUBLICly::GL,imm32?
是的,是这样的。更多细节可以在构建规范和使用要求一节的正式文档中找到。
这背后的原因是因为imgui是一个共享库吗?
是的,是这样的。由于add_library()没有任何SHARED或STATIC命名参数,用户可以通过提供-DBUILD_SHARED_LIBS:BOOL=OFF cmake(1)参数来静态地构建它。因此,要链接到它,链接器需要所有的依赖项列表。这是一个很好的做法,让他选择如何构建你的项目;-)
https://stackoverflow.com/questions/72721399
复制相似问题