Какой подход к компиляции кода считается самым лучшим? Через дефайны, передаваемые в билдовый скрипт, создание нескольких бинарников и т.д.?
4. Вынос всех функций, зависящих от железа, в динамические библиотеки.
При старте определяется железо и подключаются нужные либы.
Особенно актуально, если железо включено не постоянно или может измениться по ходу работы.
3 вариант, только не с if-ами, а с наследованием, интерфейсами и прочим ООП. Раз уж названия и аргументы одинаковые - то вообще норм будет.