Sto usando CMake per diversi anni e ho scoperto che - nei casi in cui sono alle prese con CMake - sono ancora non completamente sicuro del concetto alla base di CMake
(non prendendo in considerazione CTest
, CPack
o CDash
fornito anche con CMake).
Quando ho iniziato mi sono imbattuto in la presentazione di Bill Hoffman su Google Tech Talks e un reclamo in cui mi è rimasto in mente:
CMake aims to give C++ compile portability like the compile once and run everywhere of Java, Python and C#
Partendo da lì e dai concetti base della pagina di CMake , sono arrivato a pensare a CMake in termini dei seguenti tre principali concetti di programmazione a livello:
- CMake è un livello di astrazione per la build e i sistemi operativi che supporta
- CMake è un linguaggio di programmazione di alto livello per le descrizioni delle procedure di creazione
- CMake ti assiste nello sviluppo multipiattaforma creando parti di codice configurabili
Sono pienamente consapevole della complessità del compito di CMake, ma spero che tu possa comunque aiutarmi con:
- Essendo un livello di astrazione, non può / non deve esporre tutte le funzionalità del livello sottostante. Quindi, perché ci sono così tanti buchi da esplorare in CMake?
- Soprattutto i comandi dall'inizio hanno bypass. Per esempio.
add_definitions()
: "Questo comando può essere utilizzato per aggiungere eventuali flag, ma è destinato ad aggiungere definizioni pre-processore " - Vedo che CMake sta andando nella giusta direzione, ad es.
target_compile_features()
per l'astrazione dei flag del compilatore
- Soprattutto i comandi dall'inizio hanno bypass. Per esempio.
- Per i casi in cui ho davvero bisogno di un bypass (qualcosa che posso realizzare solo nella lingua madre) perché CMake non fornisce un modo generico di "codice nativo in linea" come fanno altri linguaggi di programmazione di alto livello?
- es. come la
asm
macro / comando in C ++
- es. come la
- Va bene in CMake aggiungere un altro livello di astrazione a CMake stesso (per nascondere la complessità di CMake agli utenti dei miei ambienti di compilazione)?
- Penso di si. E poiché capisco che è un linguaggio di programmazione di alto livello, perché no?
Grazie in anticipo per le tue opinioni e aiuto in questo.