obj = src.sub(/.c$/,'.о')

 file(obj) { sh 'cc -с -o #{obj} #{src}' }

end

Однако проще пользоваться правилами. Это еще один механизм Rake, естественно, позаимствованный у make:

rule '.о' => '.с' do |target|

 sh 'сс -с -о #{target.name} #{target.source}'

end

Тут мы наблюдаем небольшое волшебство. Rake устанавливает атрибут source, подставляя расширение имени файла из хэша (в данном случае .o заменяется на .c).

Продолжим сеанс магии. Если затребовать библиотеку rake/clean, то появляются константы clean и clobber (первоначально пустые) и задания :clean и :clobber. По сложившейся традиции clean удаляет временные файлы, a clobber — еще и собранный исполняемый файл.

Для этих напоминающих массив констант определен метод include, принимающий маску имени файлов; это неявное использование механизма FileList.

Теперь наш rake-файл принимает такой вид:

require 'rake/clean'

CLEAN.include('*.о')

CLOBBER.include('myprog')

SRC = FileList['*.с']

OBJ = SRC.ext('o')

rule '.o' => '.c' do |t|

 sh 'cc -с -o #{t.name} #{t.source}'

end

file 'hello' => OBJ do

 sh 'cc -o hello #{OBJ}'

end

file 'myprog.o' => ['myprog.c']

file 'sub1.o' => ['sub1.c', 'sub1.h']

file 'sub2.o' => ['sub2.c', 'sub2.h']

task :default => ['myprog']

Обратите внимание, что мы не задавали задания «clean» и «clobber» явно. Кроме того, отметим что «clobber» неявно включает операцию «clean». И наконец, мы определили задание default для удобства запуска rake-файла; теперь можно не указывать явно имя задания, осуществляющего компиляцию и сборку.

У программы rake есть несколько параметров командной строки. Иногда желательно протестировать rake-файл, не выполняя никаких (потенциально опасных) операций; для этого служит флаг -n или --dry-run. Флаг -T выводит список всех целей в rake- файле. Имеются также флаги, управляющие поиском библиотек, трассировкой, протоколированием и т.д.

Программа Rake сложнее, чем я описал в этом разделе (особенно это касается правил). И она продолжает развиваться. Как обычно, самую свежую информацию ищите в онлайновой документации (http://docs.rubyrake.org/).

21.3. Оболочка irb

Утилита irb (интерактивный Ruby) уже много лет как включена в дистрибутив Ruby. Можно считать, что это «испытательный стенд» или «площадка для игр», на которой вы опробуете новые приемы и идеи.

Работать с irb просто. После запуска вы получаете приглашение и можете вводить произвольные выражения Ruby. Выражение вычисляется, и печатается результат. Вот пример короткого сеанса:

$ irb

irb(main):001:0> 'cell' + 'о'

=> 'cello'

irb(main):002:0> 3*79

=> 237

irb(main):003:0> Dir.entries('.').size

=> 17

irb(main):004:0> rand

=> 0.850757389880155

irb(main):005:0> rand

=> 0.679879756672551

irb(main):006:0> defined? Foo

=> nil

irb(main):007:0> defined? Object

=> 'constant'

irb(main):008:0> quit

$

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

[hal@localhost ch21]$ irb

irb(main):001:0> require 'mathn'

=> true

irb(main):002:0> gen = Prime.new

=> #

При установке флага -r выполняется require, поэтому можно включать код из внешнего файла. Предположим, что вы написали такой файл:

# File: foo.rb

class MyClass

 attr_accessor :alpha, :beta

 def initialize(a, b)

  @alpha, @beta = a, b

 end

end

obj1 = MyClass.new(23,34)

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату