Sono impegnato nel porting del mio processo di compilazione da msbuild a cmake, per essere più in grado di gestire la toolchain gcc (che genera codice molto più veloce per alcune delle cose numeriche che sto facendo) .cmake: utilizzo di più configurazioni di output
Ora, mi piacerebbe cmake generare diverse versioni dell'output, cose come una versione con sse2, un'altra con x64 e così via. Tuttavia, cmake sembra funzionare in modo molto naturale se si dispone semplicemente di un gruppo di flag (ad esempio "sse2_enable" e "platform") e quindi generare un output basato su tali piattaforme.
Qual è il modo migliore per lavorare con più configurazioni di uscita come questa? Intuitivamente, mi piacerebbe scorrere su un gran numero di combinazioni di flag e rieseguire gli stessi file CMakeList.txt per ciascuna combinazione, ma ovviamente non è possibile esprimere quello all'interno dei file CMakeLists.txt (AFAIK) all'interno di.
Tuttavia, ci sono diversi problemi con questo approccio. Prima di tutto, richiede più invocazioni per creare e guadagnare poco, ma introduce una complessità extra: cmake è * multipiattaforma *, ma lo scripting della shell non lo è. In secondo luogo, rallenta un po 'le cose; normalmente, puoi usare make -j per costruire tutte le varie combinazioni in modo piacevolmente multithread, ma con l'approccio di multiple-cmake devi parallelizzare manualmente (e accettare l'uso di mem più alto e caricare e rallentare perché le istanze separate di make non lo fanno cooperare). Il vantaggio è che può gestire conflitti di nomi. –
Un altro svantaggio: un caso d'uso secondario che avevo in mente era più build per CPU diverse, e poi selezionando il migliore in fase di esecuzione - e poi c'è davvero bisogno che il risultato finale dipenda da più build dello stesso sub -progetto. –
Comunque, è per questo che ho scelto l'altra soluzione - ma la tua è decisamente più canonica e funziona (con i suddetti inconvenienti) più in generale - grazie per aver contribuito! –