Это невозможно, и также не имеет смысла определять ВСЕ макросы, используемые определенным заголовочным файлом. Некоторые из них могут быть взаимоисключающими.
Скажет, например, у вас есть:
#if ARCH_X86
... stuff goes here for x86...
#endif
#if ARCH_ARM
.... stuff goes here for ARM ...
#endif
оригинальный автор, конечно, не хочет, чтобы вы скомпилировать это как с ARM и X86 с поддержкой в то же время, так как эта комбинация не имеет никакого смысла в все.
И даже если вы должны были определить все определяет, вы бы не поймать вторую часть этого:
#if ARCH_X86
#include <x86_stuff.h>
#else
#include <arm_stuff.h>
#endif
Если ваш проект имеет специальные определяет, а затем использовать их. Но все это не имеет никакого смысла.
Другая проблема состоит в том, что вы можете найти системно-зависимые файлы, и определяет, связанные с тем, например:
#ifdef WINDOWS
#include <windows.h>
#elsif LINUX
#include <linux.h>
#else
#error "Must be either Linux or Windows".
#endif
#if WINDOWS_THINGY_BOB
... do stuff here ...
#endif
(Предполагая WINDOWS_THINGY_BOB это определяют набор путем включения windows.h)
другой потенциальная проблема заключается в том, что не все «#ifdef», но что-то вроде этого:
#if DEBUG==2
#include <debug_lots.h>
#elsif DEBUG != 1
#include <debug_little.h>
#else
#include <no_debug.h>
#endif
Если вы действительно хотите увидеть «если X определено, то это включено», вы придется писать собственный код, чтобы следовать различным путям с разными определениями, в том числе «не задано».
Я вижу, что это очень быстро усложнится, если у вас нет четкого набора «что такое среда, в которой я собираюсь».
В чем проблема, которую вы пытаетесь решить? – yasouser
Проблема, которую я пытаюсь решить, довольно описательна в моем вопросе, для чего я получил ответ от Маца Петерсона. – Cleonjoys
По некоторым причинам я не могу раскрыть цель этого требования. Это не для компиляции двоичных файлов, а в том, чтобы углубиться в ОС. – Cleonjoys