Существует три источника макросов: предопределенный / ввод из командной строки / исходный код.
Этот вопрос - получить первые два во время компиляции.
Возможно, есть тонкие факторы, которые влияют на то, какой предопределенный макрос действительно генерируется во время компиляции, и, возможно, некоторые макросы командной строки тоже фильтруются. Так что золотой стандарт - это список внутри компилятора во время компиляции, и вопрос в том, как получить list. Лучше позволить clang выводить список в файл, например -MF flag. Плагин Clang - это еще один возможный способ.