Как импортировать макросы в подмодулях в Rust?
У меня есть следующая структура каталогов
-
/main.rs
-
/lib.rs
-
/tutorial/mod.rs
-
/tutorial/foo.rs
В foo.rs
Мне нужно использовать макрос из библиотеки glium, implement_vertex!
. Если я положил #[macro_use] extern crate glium;
во главе foo.rs
, я получаю a error: an `extern crate` loading macros must be at the crate root
. Я также получаю error: macro undefined: 'implement_vertex!'
Существует также lib.rs
, который является корнем ящика модулей учебника. Мне нужно было поставить #[macro_use]
. Создает ли это 2 корня ящика, если у меня есть как main.rs
, так и lib.rs
?
Каков правильный способ импорта макросов в подмодуль?
Ответы
Ответ 1
Макросы обрабатываются достаточно рано на этапе компиляции, что порядок имеет значение. Вы, как и я, вероятно, становились красивыми и привыкли к тому, что Руст отмахивался от необходимости заботиться о порядке вашего использования и заявлений о ящике.
Переместите инструкцию #[macro_use] extern crate glium;
в начало файла lib.rs
и/или main.rs
по мере необходимости.
Ответ 2
Сделайте это так, как компилятор сказал вам:
an `extern crate` loading macros must be at the crate root
Поместите #[macro_use] extern crate glium;
в корень ящика, который main.rs
в вашем случае. Убедитесь, что оператор extern crate
находится перед вашими операторами mod
, иначе модули не смогут получить доступ к импортированным макросам.
Затем вы можете использовать макрос в своем подмодуле.
Ответ 3
Я разобрался в своей первоначальной проблеме. Выходит, есть 2 грузовых корня? У меня есть и lib.rs
и main.rs
Оказывается, правильное место для размещения #[macro_use]
было в lib.rs