C'è un modo (ad es. Costanti definite) per accedere ai flag di compilazione con cui è stato eseguito il compilatore all'interno del codice che viene compilato.g ++: C'è un modo per accedere ai flag di compilazione all'interno del codice che viene compilato?
Ad esempio, desidero un programma che scriva le flag con cui è stato compilato.
int main(){
std::cout << COMPILE_FLAGS << std::endl;
}
Esistono tali costanti per gcc/g ++? O ancora meglio: ci sono costanti che sono definite sia in gcc che in clang?
Sono particolarmente interessato a esaminare il livello di ottimizzazione e il valore del flag -march
. Quindi, se non ci sono costanti che mostrano tutti i flag, ci sono almeno quelli che visualizzano questi valori?
Se non altro, si dovrebbe essere in grado di hackerare qualcosa insieme usando un makefile che imposta simultaneamente un flag di ottimizzazione e scrive una costante in un file di intestazione. – Degustaf
Vorrei provare a cercare nelle informazioni di debug memorizzate con il codice, SE è compilato con tali informazioni. In generale, direi che non c'è modo, perché compiliamo il codice macchina, e nella maggior parte dei casi questa informazione sarebbe del tutto inutile in fase di esecuzione. Voglio dire che la maggior parte delle bandiere influenza quali istruzioni macchina sono state scelte e quali ottimizzazioni possono essere fatte, quindi potresti essere in grado di dedurre alcuni dei flag dal codice macchina stesso. – midor