Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
sub2.сsub2.hМы хотим собрать из них исполняемый файл
myprog.с.оНачнем с метода
filefile "myprog.о" => ["myprog.с"]file "sub1.о" => ["sub1.с", "sub1.h"]file "sub2.o" => ["sub2.c", "sub2.h"]file "myprog" => ["sub1.o", "sub2.o"]Отметим, что метод
fileТеперь перейдем к построению двоичных файлов. Расширим написанный выше код. Если после вызова метода
filefile "myprog.о" => ["myprog.с"] do sh "сс -с -о myprog.о myprog.с"endfile "sub1.o" => ["sub1.с", "sub1.h"] do sh "сс -с -o sub1.o sub1.c"endfile "sub2.o" => ["sub2.c", "sub2.h"] do sh "сс -с -o sub2.o sub2.c"endfile "myprog" => ["sub1.o", "sub2.o"] do sh "cc -o myprog myprog.о sub1.o sub2.o"endЗдесь имеется некоторое дублирование, но от него можно избавиться. В Rake есть специальный механизм, который называется
FileList.cSRCFileListSRC = FileList["*.с"]Теперь можно определить действия в цикле, как показано ниже. И обратите внимание, что зависимости здесь не упоминаются — Rake самостоятельно учтет эту информацию, если она была задана в другом месте.
SRC.each do |src| obj = src.sub(/.c$/,".о") file(obj) { sh "cc -с -o #{obj} #{src}" }endОднако проще пользоваться правилами. Это еще один механизм Rake, естественно, позаимствованный у
makerule '.о' => '.с' do |target| sh "сс -с -о #{target.name} #{target.source}"endТут мы наблюдаем небольшое волшебство. Rake устанавливает атрибут
source.o.cПродолжим сеанс магии. Если затребовать библиотеку
rake/cleancleanclobber:clean:clobbercleanclobberДля этих напоминающих массив констант определен метод
includeFileListТеперь наш 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}"endfile "hello" => OBJ do sh "cc -o hello #{OBJ}"endfile "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-n--dry-run-TПрограмма Rake сложнее, чем я описал в этом разделе (особенно это касается правил). И она продолжает развиваться. Как обычно, самую свежую информацию ищите в онлайновой документации (http://docs.rubyrake.org/).
