Ciao loryruta
come promesso nel server Discord, ecco due righe che provano a farti chiarezza su quanto cerchi di fare.
La prima cosa che dev'essere chiara è che CMakeLists.txt
descrive il build process attraverso una serie di comandi ordinati nel formato command(args ...)
. Se qualche comando non ti è chiaro, puoi cercarlo e studiarlo sulla CMake Reference Documentation.
Proseguendo, nel momento in cui invochi il comando add_executable(battleship main.cpp)
, crei un target di nome battleship. Si suppone che main.cpp
si avvalga degli header di GLEW, GLFW, e SOIL (ovvero i file .h
). Non dimenticare che il compilatore deve anche sapere dove sono le librerie (ovvero quei file che contengono l'effettiva implementazione delle funzioni dichiarate negli header), in modo da poterle linkare, nel nostro caso, al target battleship.
Prendiamo in considerazione GLEW. Il comando find_package(GLEW REQUIRED)
invoca il modulo di ricerca FindGlew.cmake
che a sua volta farà sicuramente uso di comandi come find_path
e find_library
. Questo modulo, dopo l'esecuzione, definisce le seguenti variabili:
GLEW_INCLUDE_DIRS
- include directories for GLEW
GLEW_LIBRARIES
- libraries to link against GLEW
GLEW_FOUND
- true if GLEW has been found and can be used
Chiaro fin qui? Gli header si trovano in GLEW_INCLUDE_DIRS
, e le librerie in GLEW_LIBRARIES
.
A questo punto, le GLEW_INCLUDE_DIRS
devono essere aggiunte alle include directories, usando
target_include_directories(battleship PUBLIC "${GLEW_INCLUDE_DIRS}")
e le GLEW_LIBRARIES
devono essere linkate al target, usando
target_link_libraries(battleship "${GLEW_LIBRARIES}")
Vuoi usare GLEW_FOUND
? Prova con una roba del genere:
if(NOT ${GLEW_FOUND})
message("Non ho trovato GLEW, tant'è che GLEW_FOUND contiene ${GLEW_FOUND}")
endif()