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!
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.
CMakeLists.txt
y agregue la siguiente línea:add_subdirectory(extern)
extern
en la carpeta raíz del proyecto.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()
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.
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.
CMakeLists.txt
y agregue la siguiente línea:add_subdirectory(extern)
extern
en la carpeta raíz del proyecto.extern/CMakeLists.txt
con el siguiente contenido:glad
como dependencia dentro de uno de susCMakeLists.txt
s como de costumbre:Espero que esto ayude.