Glad: Problemas al usar CMake en Windows

Creado en 21 sept. 2018  ·  7Comentarios  ·  Fuente: Dav1dde/glad

Hola,

Tengo problemas para alegrarme de trabajar con CMake en Windows. Me gustaría tener una ejecución feliz como parte de nuestro proceso de compilación de CMake y usar los archivos glad.h / lib generados en nuestro proyecto.

Para probar, la estructura de mi carpeta se ve así:
C:\Users\me\projects\glad (clonado de GitHub)
C:\Users\me\projects\glad-driver (nuevo directorio sin nada excepto CMakeLists.txt)

También hice directorios vacíos build\ de cada uno de estos.

Los contenidos de glad-driver\CMakeLists.txt son:

cmake_minimum_required(VERSION 3.0)
set(glad_DIR "..\\glad\\build")
find_package(glad REQUIRED)

Estos son los comandos que utilizo para intentar compilar glad-driver. Primero ejecute CMake en glad:

> cd contento \ build
> cmake -DGLAD_INSTALL = ON ..

Resultado:

- Edificio para: Visual Studio 15 2017
- La identificación del compilador de C es MSVC 19.15.26729.0
- Compruebe si el compilador de C funciona: C: / Archivos de programa (x86) / Microsoft Visual Studio / 2017 / Community / VC / Tools / MSVC / 14.15.26726 / bin / Hostx86 / x86 / cl.exe
- Verifique si el compilador C funciona: C: / Archivos de programa (x86) / Microsoft Visual Studio / 2017 / Community / VC / Tools / MSVC / 14.15.26726 / bin / Hostx86 / x86 / cl.exe - funciona
- Detectando información ABI del compilador C
- Detectando información ABI del compilador C - hecho
- Detección de funciones de compilación de C
- Detectando funciones de compilación de C - hecho
- Encontrado PythonInterp: C: /Users/me/AppData/Local/Programs/Python/Python36/python.exe (versión encontrada "3.6.5")
- Configuración hecha
- Generando hecho
- Los archivos de compilación se han escrito en: C: / Users / me / projects / glad / build

A continuación, compile los proyectos de Visual Studio generados:

> msbuild / p: Configuración = Liberar ALL_BUILD.vcxproj

Resultado:
(Muchas cosas entonces):

Terminado el proyecto de construcción "C: \ Users \ me \ projects \ glad \ build \ ALL_BUILD.vcxproj" (objetivos predeterminados).

La construcción tuvo éxito.
0 Advertencia (s)
0 error (s)

Tiempo transcurrido 00: 00: 02.08

Último paso, intenta alegrarte con el comando find_package CMake:

> cd .... \ glad-driver \ build
> cmake ..

Resultado:

- Edificio para: Visual Studio 15 2017
- La identificación del compilador de C es MSVC 19.15.26729.0
- La identificación del compilador CXX es MSVC 19.15.26729.0
- Compruebe si el compilador C funciona: C: / Archivos de programa (x86) / Microsoft Visual> Studio / 2017 / Community / VC / Tools / MSVC / 14.15.26726 / bin / Hostx86 / x86 / cl.exe
- Verifique si el compilador C funciona: C: / Archivos de programa (x86) / Microsoft Visual Studio / 2017 / Community / VC / Tools / MSVC / 14.15.26726 / bin / Hostx86 / x86 / cl.exe - funciona
- Detectando información ABI del compilador C
- Detectando información ABI del compilador C - hecho
- Detección de funciones de compilación de C
- Detectando funciones de compilación de C - hecho
- Compruebe si el compilador CXX funciona: C: / Archivos de programa (x86) / Microsoft Visual Studio / 2017 / Community / VC / Tools / MSVC / 14.15.26726 / bin / Hostx86 / x86 / cl.exe
- Compruebe si el compilador CXX funciona: C: / Archivos de programa (x86) / Microsoft Visual Studio / 2017 / Community / VC / Tools / MSVC / 14.15.26726 / bin / Hostx86 / x86 / cl.exe - funciona
- Detectando información ABI del compilador CXX
- Detectando información ABI del compilador CXX - hecho
- Detección de funciones de compilación de CXX
- Detectando funciones de compilación de CXX - hecho
Error de CMake en C: / Users / me / projects / glad / build / gladConfig. cmake: 27 (incluir):
include no pudo encontrar el archivo de carga:

C:/Users/me/projects/glad/build/gladTargets.cmake

Pila de llamadas (la llamada más reciente primero):
CMakeLists. txt: 3 (buscar_paquete)

- ¡Configuración incompleta, se produjeron errores!
Consulte también "C: /Users/me/projects/glad-driver/build/CMakeFiles/CMakeOutput.log".

Una investigación adicional revela que el archivo gladTargets.cmake (y un par de archivos aparentemente relacionados se encuentran en realidad en):

C:\Users\me\projects\glad\build\CMakeFiles\Export\lib\cmake\glad\gladTargets.cmake

No sé por qué gladConfig.cmake termina en build y gladTargets.cmake termina en build\CmakeFiles\Export\lib\cmake\glad .

Si copio gladTargets.cmake en el directorio glad\build y vuelvo a ejecutar CMake desde glad-driver, entonces mi proyecto de CMake glad-driver tiene éxito. Sin embargo, si agrego las siguientes líneas a glad-driver \ CMakeLists.txt:

add_executable (hello_glad "HelloGlad.cpp")
target_link_libraries(hello_glad glad::glad)

entonces me sale el siguiente error:

Error de CMake en CMakeLists.txt:
El destino importado "glad :: glad" incluye una ruta inexistente

"C:/Users/me/include/glad"

en sus INTERFACE_INCLUDE_DIRECTORIES. Las posibles razones incluyen:

  • La ruta fue eliminada, renombrada o movida a otra ubicación.

  • Un procedimiento de instalación o desinstalación no se completó correctamente.

  • El paquete de instalación era defectuoso y hace referencia a archivos que no
    proveer.

¡Cualquier ayuda será muy apreciada!

glad1 question

Comentario más útil

Hola a todos.

@tysonbrochu , ¿ha considerado probar el módulo FetchContent en lugar de

Mi sugerencia es intentarlo. Puede resolver el problema que tiene (deja que CMake se encargue de todo por usted). Además, puede administrar otras dependencias de la misma manera unificada.

  1. Edite su raíz CMakeLists.txt y agregue la siguiente línea:
    add_subdirectory(extern)
  2. Cree un directorio extern en la carpeta raíz del proyecto.
  3. Cree un archivo extern/CMakeLists.txt con el siguiente contenido:
cmake_minimum_required(VERSION 3.11 FATAL_ERROR)
# Multi-Language Vulkan/GL/GLES/EGL/GLX/WGL Loader-Generator based on
# the official specs. http://glad.dav1d.de/
FetchContent_Declare(
  extern_glad

  GIT_REPOSITORY https://github.com/Dav1dde/glad.git
  GIT_TAG        v0.1.27)

FetchContent_GetProperties(extern_glad)
if(NOT extern_glad_POPULATED)
  FetchContent_Populate(extern_glad)

  set(GLAD_INSTALL ON)
  add_subdirectory(
    ${extern_glad_SOURCE_DIR}
    ${extern_glad_BINARY_DIR}
    EXCLUDE_FROM_ALL)
endif()
  1. Agregue glad como dependencia dentro de uno de sus CMakeLists.txt s como de costumbre:
target_link_libraries(the_target_you_want_to_link_agains_glad
  PUBLIC
  glad

  PRIVATE
  ${CMAKE_DL_LIBS})

Espero que esto ayude.

Todos 7 comentarios

Gracias por la descripción completa de su problema. Tendré que investigarlo e intentar reproducir este problema.

@sfuller, ¿ quizás puedas ayudarme a investigar esto?

¡Gracias por la rápida respuesta!

Creo que ahora podría estar más cerca de una solución. Creo que en lugar de ejecutar msbuild en la salida de glad cmake, debería ejecutar cmake --build . --install . Eso parece intentar instalar todo (gladConfig y gladTargets) en mi directorio CMake. Continuaré investigando, pero aún me interesaría saber si alguien ha tenido éxito con una configuración similar.

¿Descubriste esto? Lo siento ocupado en este momento, intentaré echar un vistazo al fin de semana nuevamente.

No hay problema. No rastreamos todo esto hasta llegar a una solución viable, y tuvimos que pasar a otras cosas. Entonces, por ahora, solo vamos a incorporar los archivos .h / .c pregenerados directamente en nuestra compilación, en lugar de pasar por el mecanismo CMake de glad. Si volvemos a visitarlo en el futuro, actualizaré este problema.

De nuevo, gracias por tu ayuda.

Hola a todos.

@tysonbrochu , ¿ha considerado probar el módulo FetchContent en lugar de

Mi sugerencia es intentarlo. Puede resolver el problema que tiene (deja que CMake se encargue de todo por usted). Además, puede administrar otras dependencias de la misma manera unificada.

  1. Edite su raíz CMakeLists.txt y agregue la siguiente línea:
    add_subdirectory(extern)
  2. Cree un directorio extern en la carpeta raíz del proyecto.
  3. Cree un archivo extern/CMakeLists.txt con el siguiente contenido:
cmake_minimum_required(VERSION 3.11 FATAL_ERROR)
# Multi-Language Vulkan/GL/GLES/EGL/GLX/WGL Loader-Generator based on
# the official specs. http://glad.dav1d.de/
FetchContent_Declare(
  extern_glad

  GIT_REPOSITORY https://github.com/Dav1dde/glad.git
  GIT_TAG        v0.1.27)

FetchContent_GetProperties(extern_glad)
if(NOT extern_glad_POPULATED)
  FetchContent_Populate(extern_glad)

  set(GLAD_INSTALL ON)
  add_subdirectory(
    ${extern_glad_SOURCE_DIR}
    ${extern_glad_BINARY_DIR}
    EXCLUDE_FROM_ALL)
endif()
  1. Agregue glad como dependencia dentro de uno de sus CMakeLists.txt s como de costumbre:
target_link_libraries(the_target_you_want_to_link_agains_glad
  PUBLIC
  glad

  PRIVATE
  ${CMAKE_DL_LIBS})

Espero que esto ayude.

Hola, lo siento, llego tarde a esta conversación.
En su proyecto, está usando find_package(glad REQUIRED) .
No creo que esto funcione a menos que tenga un módulo especial utilizado para encontrar GLAD. Para usar el mecanismo del paquete de configuración de CMake que Glad está utilizando, intente usar find_package(glad REQUIRED CONFIG)

Tenga en cuenta que primero deberá ejecutar cmake --build . --install en la compilación alegre. Además, si CMake aún no puede encontrar el objetivo GLAD, es posible que deba apuntar a CMake a los archivos instalados usando -DCMAKE_PREFIX_PATH . Consulte la documentación de find_package para obtener información más detallada al respecto: https://cmake.org/cmake/help/v3.12/command/find_package.html

Supongo que esto está resuelto, si no, siéntase libre de volver a abrir.

¿Fue útil esta página
0 / 5 - 0 calificaciones