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
- 1. dizionario Incanta diverse piattaforme
- 2. CMake - diverse directory di inclusione per obiettivi diversi?
- 3. CMake più toolchain e piattaforme di destinazione
- 4. Utilizzo di puntatori void su piattaforme diverse
- 5. OpenGL + Qt con CMake
- 6. I lambda hanno tipi diversi?
- 7. I simulatori 68k diversi hanno compiti TRAP diversi?
- 8. Build per diverse piattaforme il modo Maven
- 9. La serializzazione Boost serializza in modo diverso su piattaforme diverse?
- 10. Rileva piattaforme per dispositivi diversi utilizzando i CSS
- 11. Include makefile esterno con CMake
- 12. Utilizzo di diversi riferimenti in Visual Studio 2010 per diverse piattaforme di sviluppo?
- 13. Come applicare diverse opzioni del compilatore per diversi compilatori in cmake?
- 14. Rimanere su piattaforme mobili
- 15. comprendere la necessità di compilatori per diverse piattaforme
- 16. IP diversi diretti su diverse pagine su IIS7
- 17. CMake nomi variabili case sensitive?
- 18. Sviluppo di un gioco multipiattaforma, con sviluppatori su più piattaforme
- 19. Perché hash (None) cambia tra piattaforme diverse e in chiamate diverse?
- 20. C'è un modo per localizzare un'applicazione su varie piattaforme
- 21. I client memcache di lingue diverse hanno lo stesso hash?
- 22. Cmake: Build directory in include path
- 23. Perché DecimalFormat ". #" E "0. #" hanno risultati diversi su 23.0?
- 24. Come compilare l'applicazione qt di compilazione per piattaforme diverse
- 25. Che aspetto hanno i "nomi di interfaccia" di Windows?
- 26. Textarea e ingresso hanno diverse larghezze
- 27. Proguard: IllegalArgumentException: Pile hanno dimensioni diverse correnti
- 28. Unione su campi con nomi diversi che utilizzano peewee
- 29. I nomi nell'assembly di interoperabilità hanno una maiuscola errata
- 30. Perché i rownames (installed.packages()) hanno un attributo nomi?
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