C++ 如何使用依赖项glfw、GLEW和GL创建亲爱的ImGui的config.cmake文件

C++ 如何使用依赖项glfw、GLEW和GL创建亲爱的ImGui的config.cmake文件,c++,cmake,imgui,C++,Cmake,Imgui,大家好,谢谢你们看我的问题 目前我试图创建ImGuiConfig.cmake文件,以便使用亲爱的ImGui库 我想从外部项目中使用该库,如下所示 find_package(ImGui REQUIRED) add_executable(hello hello.cpp) target_link_libraries(hello ${IMGUI_LIBRARIES}) 下面的CMakeLists.txt是我为安装ImGui库而编写的文件 cmake_minimum_required(VERSION 3

大家好,谢谢你们看我的问题

目前我试图创建ImGuiConfig.cmake文件,以便使用亲爱的ImGui库

我想从外部项目中使用该库,如下所示

find_package(ImGui REQUIRED)
add_executable(hello hello.cpp)
target_link_libraries(hello ${IMGUI_LIBRARIES})
下面的CMakeLists.txt是我为安装ImGui库而编写的文件

cmake_minimum_required(VERSION 3.10)

# Project Name
project(ImGui)

# This cmake file try to make a lib of ImGui glfw backend
add_definitions(-fPIC)

set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)

# Get header and source file name
file(GLOB_RECURSE SOURCE_CPP RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ImGui/*.cpp)
file(GLOB_RECURSE SOURCE_HEADER RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ImGui/*.h)

# create target
add_library(${PROJECT_NAME} STATIC ${SOURCE_CPP})
target_link_libraries(${PROJECT_NAME} PUBLIC glfw GLEW GL)
set_target_properties(${PROJECT_NAME} PROPERTIES IMPORTED_LINK_LIBRARIES "glfw;GLEW;GL")
set_target_properties(${PROJECT_NAME} PROPERTIES INTERFACE_LINK_LIBRARIES "glfw;GLEW;GL")

install(TARGETS ${PROJECT_NAME} 
    EXPORT ImGuiConfig
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    )

export(TARGETS ${PROJECT_NAME}
    FILE "${CMAKE_CURRENT_BINARY_DIR}/ImGuiConfig.cmake")

install(EXPORT ImGuiConfig
    DESTINATION lib/cmake/ImGui
    EXPORT_LINK_INTERFACE_LIBRARIES
    )
但当我编译使用ImGui库的外部程序时,我得到了以下错误

harumo@harumo-thinkpad-x1:~/program/cpp/imgui/hello/build$ make
Scanning dependencies of target hello
[ 50%] Building CXX object CMakeFiles/hello.dir/hello.cpp.o
[100%] Linking CXX executable hello
CMakeFiles/hello.dir/hello.cpp.o: In function `main':
hello.cpp:(.text+0x32): undefined reference to `glfwWindowHint'
hello.cpp:(.text+0x41): undefined reference to `glfwWindowHint'
hello.cpp:(.text+0x50): undefined reference to `glfwWindowHint'
hello.cpp:(.text+0x5f): undefined reference to `glfwWindowHint'
hello.cpp:(.text+0x82): undefined reference to `glfwCreateWindow'
hello.cpp:(.text+0x8f): undefined reference to `glfwMakeContextCurrent'
hello.cpp:(.text+0x99): undefined reference to `glfwSwapInterval'
hello.cpp:(.text+0x9e): undefined reference to `glewInit'
hello.cpp:(.text+0xd3): undefined reference to `ImGui::DebugCheckVersionAndDataLayout(char const*, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)'
hello.cpp:(.text+0xe1): undefined reference to `ImGui::CreateContext(ImFontAtlas*)'
hello.cpp:(.text+0xea): undefined reference to `ImGui::GetIO()'
hello.cpp:(.text+0xf9): undefined reference to `ImGui::StyleColorsLight(ImGuiStyle*)'
hello.cpp:(.text+0x107): undefined reference to `ImGui_ImplGlfw_InitForOpenGL(GLFWwindow*, bool)'
hello.cpp:(.text+0x113): undefined reference to `ImGui_ImplOpenGL3_Init(char const*)'
hello.cpp:(.text+0x147): undefined reference to `glfwWindowShouldClose'
hello.cpp:(.text+0x155): undefined reference to `glfwPollEvents'
hello.cpp:(.text+0x15a): undefined reference to `ImGui_ImplOpenGL3_NewFrame()'
hello.cpp:(.text+0x15f): undefined reference to `ImGui_ImplGlfw_NewFrame()'
hello.cpp:(.text+0x164): undefined reference to `ImGui::NewFrame()'
hello.cpp:(.text+0x179): undefined reference to `ImGui::Begin(char const*, bool*, int)'
hello.cpp:(.text+0x18d): undefined reference to `ImGui::Text(char const*, ...)'
hello.cpp:(.text+0x1a4): undefined reference to `ImGui::Checkbox(char const*, bool*)'
hello.cpp:(.text+0x1ac): undefined reference to `ImGui::End()'
hello.cpp:(.text+0x1b1): undefined reference to `ImGui::Render()'
hello.cpp:(.text+0x1dc): undefined reference to `glfwGetFramebufferSize'
hello.cpp:(.text+0x1f0): undefined reference to `glViewport'
hello.cpp:(.text+0x209): undefined reference to `glClearColor'
hello.cpp:(.text+0x213): undefined reference to `glClear'
hello.cpp:(.text+0x218): undefined reference to `ImGui::GetDrawData()'
hello.cpp:(.text+0x220): undefined reference to `ImGui_ImplOpenGL3_RenderDrawData(ImDrawData*)'
hello.cpp:(.text+0x229): undefined reference to `glfwSwapBuffers'
hello.cpp:(.text+0x233): undefined reference to `ImGui_ImplOpenGL3_Shutdown()'
hello.cpp:(.text+0x238): undefined reference to `ImGui_ImplGlfw_Shutdown()'
hello.cpp:(.text+0x241): undefined reference to `ImGui::DestroyContext(ImGuiContext*)'
hello.cpp:(.text+0x24a): undefined reference to `glfwDestroyWindow'
hello.cpp:(.text+0x24f): undefined reference to `glfwTerminate'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
CMakeFiles/hello.dir/build.make:100: recipe for target 'hello' failed
make[2]: *** [hello] Error 1
CMakeFiles/Makefile2:92: recipe for target 'CMakeFiles/hello.dir/all' failed
make[1]: *** [CMakeFiles/hello.dir/all] Error 2
Makefile:100: recipe for target 'all' failed
make: *** [all] Error 2
似乎没有导入glfw、GLEW和GL库

如果您能告诉我如何使用上述CMakeLists.txt导入glfw、GLEW和GL库,我将非常高兴。 如果你需要更多的信息,尽管告诉我


提前感谢。

Config文件,由CMake通过
install(TARGETS…EXPORT)生成。
使用与已安装目标相同的名称定义导入的库目标。这个文件没有定义像
IMGUI\u LIBRARIES
这样的变量,因此
${IMGUI\u LIBRARIES}
被扩展为零。不是,主配置文件(通过
find_package
包含)通常由您编写。此文件
include()
-s由CMake生成的文件,可以执行其他操作。我建议你读书。