У меня есть собственная библиотека с длинной историей и заголовком 30KLoC. Я хотел бы создать привязки для Rust. И я использовал ящик bindgen
почти успешно. Кроме того, bindgen
не может преобразовать макро константы в нормальные константы. Поскольку эти константы определены нечетким образом, например
#define CONSTANT ((const_type)SOME_OTHER_CONSTANT)
Итак, есть ли способ перевести такие полупостоянства в обычные Rust:
const Type name = value;
ОБНОВИТЬ
Видимо, ящик bindgen
использует clang
качестве своего backend. И clang
может иметь дело с макроопределениями и другими подобными вещами, если для парсера предоставляется правильный флаг. Итак, может ли кто-нибудь посоветовать хороший учебник по работе с определениями макросов с использованием API libclang
?
Запуск заголовков через gcc -E
(т.е. препроцессор) приведет к удалению #define
s. Он может удалить больше, чем вы хотите.
Если вы хотите выборочно препроцессить, раньше это была утилита scpp
. Я не могу сразу найти ссылку на него, кроме некоторых tar-файлов для загрузки, но у вас может быть больше удачи.