2013-04-24 11 views
5

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

+0

Hai provato il comando 'find_package (OpenGL)'? Non capisco dalla tua domanda che hai già fatto o no. – Morwenn

+0

Certo che l'ho fatto. Senza di ciò la variabile OPENGL_INCLUDE_DIRECTORY sarebbe vuota. – lisyarus

+0

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

risposta

6

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 /gle/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) 
+0

Grazie mille, ora ho un sacco di soluzioni :) – lisyarus

+2

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

Problemi correlati