Czy istnieje sposób (np. Zdefiniowane stałe), aby uzyskać dostęp do flag kompilacji, z którymi kompilator był uruchamiany wewnątrz kodu, który jest kompilowany.g ++: Czy istnieje sposób dostępu do flag kompilacji wewnątrz kodu, który jest kompilowany?
Na przykład chcę programu, który zapisuje flagi, z którymi został skompilowany.
int main(){
std::cout << COMPILE_FLAGS << std::endl;
}
Czy takie stałe istnieją dla gcc/g ++? Albo jeszcze lepiej: czy istnieją stałe zdefiniowane zarówno w gcc jak i clang?
Jestem szczególnie zainteresowany badaniem poziomu optymalizacji i wartości flagi -march
. Więc jeśli nie ma stałych pokazujących wszystkie flagi, czy są co najmniej te, które wyświetlają te wartości?
Jeśli nic więcej, powinieneś być w stanie zhakować coś razem, używając pliku Makefile, który jednocześnie ustawia flagę optymalizacyjną i zapisuje stałą do pliku nagłówkowego. – Degustaf
Chciałbym spróbować znaleźć to w informacji debugowania, która jest przechowywana z kodem, JEŚLI jest skompilowany z takimi informacjami. Ogólnie rzecz biorąc powiedziałbym, że nie ma mowy, ponieważ kompilujemy się do kodu maszynowego, a w większości przypadków byłoby to całkowicie niepotrzebne informacje w czasie wykonywania. Mam na myśli, że większość flag wpływa na to, które instrukcje maszynowe są wybierane i jakie optymalizacje można wykonać, abyś mógł wydedukować niektóre flagi z samego kodu maszynowego. – midor