Ho un progetto C++ con un nucleo che è sostanzialmente autonomo, ma con un sacco di interfacce verso codici di terze parti che un utente può o non può decidere di compilazione. Costruiamo il codice usando CMake e ora sto cercando di organizzare il codice un po 'meglio.Come organizzare gerarchia di file CMake con molteplici dipendenze opzionali
La soluzione che ho trovato è quella di aggiungere al file CMakeLists.txt in cima una serie di opzioni che determinano se un pacchetto dipendente deve essere posizionato o meno.
option(WITH_FOO "Compile the interface to Foo, if found" ON)
option(REQUIRE_FOO "Require that the Foo interface to be compiled" OFF)
option(WITH_BAR "Compile the interface to Bar, if found" ON)
option(REQUIRE_BAR "Require that the Bar interface to be compiled" OFF)
...
if(WITH_FOO)
if(REQUIRE_FOO)
find_package(Foo REQUIRED)
else(REQUIRE_FOO)
find_package(Foo)
endif(REQUIRE_FOO)
else(WITH_FOO)
set(FOO_FOUND FALSE)
endif(WITH_FOO)
if(WITH_BAR)
if(REQUIRE_BAR)
find_package(Bar REQUIRED)
else(REQUIRE_BAR)
find_package(Bar)
endif(REQUIRE_BAR)
else(WITH_BAR)
set(BAR_FOUND FALSE)
endif(WITH_BAR)
Poi nei file CMakeLists.txt nelle sottodirectory, ci saranno affermazioni quali:
if(BAR_FOUND)
add_subdirectory(bar_interface)
endif(BAR_FOUND)
non mi piace particolarmente questa soluzione, in parte perché è molto dettagliata e in parte perché sento che ci dovrebbe essere un modo più standardizzato di fare questo. C'è qualcuno che è a conoscenza di una soluzione migliore, più gestibile?
Nice one! Penso che sia più o meno quello che mi serve. – Joel