Сначала убедитесь, что вы используете правильную команду, поэтому скопируйте, вставьте вывод из Makefile и выполните его из вашей оболочки (вручную).
Может быть, ваше определение не определено на этом пути, поэтому вотдва подхода, чтобы выяснить, что не так:
1) включить операторы #warning в свой ifdef, чтобы увидеть, действительно ли это пропущенное определение:
#warning "before the define"
#ifdef LINUX
#warning "here goes the linux define"
..inlcudes
#endif
, если вы компилируете коди не видите предупреждение, тогда вы действительно где-то пропустите определение.
2) Проверьте вывод препроцессора.Для этого отправьте вывод препроцессора (используйте cpp, а не g ++) на стандартный вывод с помощью флага -E.(cpp -E ....)
Просматривая вывод, вы можете увидеть весь включенный код, чтобы вы могли детально отследить, какой код получает ваш компилятор.Я считаю, что этот метод последней инстанции обычно позволяет лучше понять странные проблемы.