2015-03-14 2 views
0

Есть ли способ сделать эквивалент cargo run, но только перекомпилировать, если есть изменения в исходных файлах, например make?Имеет ли груз возможность обнаружения изменений источника?

. ├── Cargo.lock ├── Cargo.toml ├── input.txt ├── README.md └── src ├── dna.rs ├── dynamic.rs ├── lib.rs └── main.rs

EDIT: Добавлен tree вывод.

ответ

3

Cargo делает это по умолчанию.

Создать новый проект:

$ cargo new --bin foo 
$ cd foo/ 

Выполнить это:

$ cargo run 
    Compiling foo v0.0.1 (file:///private/tmp/foo) 
    Running `target/foo` 
Hello, world! 

Выполнить это второй раз, ничего не меняя:

$ cargo run 
    Running `target/foo` 
Hello, world! 

и обновить файл и запустить его еще раз:

$ touch src/main.rs 
$ cargo run 
    Compiling foo v0.0.1 (file:///private/tmp/foo) 
    Running `target/foo` 
Hello, world! 

Обратите внимание на отсутствие Compiling foo... во втором пробеге. Когда файл изменен (здесь используется touch), он перекомпилируется.

Для чего это стоит, я использую cargo 0.0.1-pre-nightly (66849de 2015-03-10) (built 2015-03-11).

+0

Странно, мой компилируется каждый раз. Является ли поведение другим, когда у вас также есть внутренние модули? – anderspitman

+0

Под «* внутренними модулями *», вы имеете в виду только другие исходные файлы с соответствующим выражением 'mod'? Или вы имеете в виду что-то еще? Если первое, то я могу сказать, что это также не вызывает перекомпиляции. Возможно, ваш редактор или что-то еще ложно обновляет время модификации? – Shepmaster

+0

Хм, уверен, что VIM не трогает их. Закрыл его, чтобы быть уверенным, и он все равно восстанавливается каждый раз. Я побежал '' stat'', чтобы быть уверенным. Я редактировал свой вопрос, чтобы включить свое дерево, если это вообще поможет. – anderspitman

0

Чтобы ответить на вопрос, который вы указали в названии, «Имеет ли груз возможность обнаруживать изменения источника?», Ответ да, cargo watch. Это расширение до cargo, поэтому вам придется загрузить его и скомпилировать, прежде чем вы сможете его использовать. https://github.com/passcod/cargo-watch

Конечно, из вашего подробного вопроса ясно, что это не вопрос, который вы хотели спросить, но другие, которые видят заголовок и нажмите ссылку, вероятно, хотят получить ответ на этот вопрос.