I found di Cmake includono directory per opengl, ma le intestazioni opengl si trovano in una sottodirectory che si chiama diversamente su piattaforme diverse (e, forse, compilatori): gl su Windows, GL su Linux , OpenGL (per quanto ne so) su Mac. Quindi, aggiungere OPENGL_INCLUDE_DIRECTORY per includere i percorsi non aiuta molto - devo ancora includere (o, e così via) nelle mie fonti. Come devo affrontarlo?CMake: opengl include i dirs hanno nomi diversi su diverse piattaforme
risposta
Presumo intendi OPENGL_INCLUDE_DIR
, non OPENGL_INCLUDE_DIRECTORY
.
Hai un paio di scelte qui. Il più semplice è quello di aggiungere ${OPENGL_INCLUDE_DIR}/GL
o ${OPENGL_INCLUDE_DIR}/OpenGL
al vostro includere percorsi di ricerca e utilizzare
#include "gl.h"
nel codice sorgente.
Il caso di nomi di file è ignorato su Windows, quindi non c'è bisogno di utilizzare /gl
e/GL
- semplicemente /GL
farà.
Per raggiungere questo obiettivo, nel CMakeLists.txt fare:
if(APPLE)
include_directories(${OPENGL_INCLUDE_DIR}/OpenGL)
else()
include_directories(${OPENGL_INCLUDE_DIR}/GL)
endif()
Per rendere questo un po 'più robusto, si può avere CMake trovare il percorso a "gl.h" e comprendono che:
find_path(OpenglIncludeSubdir
NAMES gl.h
PATHS ${OPENGL_INCLUDE_DIR}
PATH_SUFFIXES GL OpenGL
NO_DEFAULT_PATH)
include_directories(${OpenglIncludeSubdir})
Anche in questo caso, nella vostra fonte devi usare:
#include "gl.h"
Forse il più robusto (ad es. evitando ulteriori percorsi oltre ${OPENGL_INCLUDE_DIR}
) sarebbe quello di trovare il percorso di "gl.h" e quindi utilizzare configure_file
per applicare il termine corretto #include
. Si potrebbe utilizzare un file di input che conteneva qualcosa come:
#include "@[email protected]/gl.h"
e quindi eseguire configure_file
sostituirebbe @[email protected]
con il suo valore e scrivere i contenuti di un file di output. Questo file di output sarebbe poi inclusa nel tuo target e avrebbe
#include "GL/gl.h"
o
#include "OpenGL/gl.h"
a seconda dei casi.
Per raggiungere questo obiettivo, devi fare qualcosa di simile:
find_file(OpenglSubdir
NAMES GL OpenGL
PATHS ${OPENGL_INCLUDE_DIR}
NO_DEFAULT_PATH)
get_filename_component(OpenglSubdir ${OpenglSubdir} NAME)
configure_file(${CMAKE_SOURCE_DIR}/my_config.h.in ${CMAKE_SOURCE_DIR}/my_config.h)
Grazie mille, ora ho un sacco di soluzioni :) – lisyarus
Sfortunatamente, sembra che questo non funzioni con Windows, dato che CMake apparentemente non imposta 'OPENGL_INCLUDE_DIR' su Windows. Questa sembra essere una decisione deliberata, basata su [questo post sulla mailing list del settembre 2004] (https://cmake.org/pipermail/cmake/2004-Settembre/005508.html), e sembra che non sia cambiato in il decennio intervenuto. – awksp
Hai provato il comando 'find_package (OpenGL)'? Non capisco dalla tua domanda che hai già fatto o no. – Morwenn
Certo che l'ho fatto. Senza di ciò la variabile OPENGL_INCLUDE_DIRECTORY sarebbe vuota. – lisyarus
Ok, mio male, non ero sicuro. Quindi, non penso ci sia alcun metodo generico oltre a costringere gli utenti a rinominare le loro directory. Ma lo trovo strano però: ho visto solo la directory 'GL', qualunque sia il sistema operativo. – Morwenn