Rake (소프트웨어)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
Rake는 Ruby로 작성된 빌드 자동화 도구이다. 태스크를 기본 단위로 사용하며, 태스크는 이름과 기능을 정의하는 액션 블록을 갖는다. 태스크는 종속성을 가질 수 있으며, 인수를 받아들여 유연성을 높일 수 있다. 파일 태스크는 특정 파일 생성 또는 업데이트에 사용되며, 파일 확장자를 기반으로 태스크를 자동으로 생성하는 규칙을 정의할 수 있다. 네임스페이스를 사용하여 태스크를 그룹화할 수도 있다. Rakefile에 실행할 작업을 정의하며, 루비 코드를 포함한다.
더 읽어볼만한 페이지
- 루비 (프로그래밍 언어) - 마츠모토 유키히로
마츠모토 유키히로는 루비 프로그래밍 언어를 창시하고 주요 개발자로 활동하며 MRI, mruby, streem 등 다양한 프로그래밍 언어 및 관련 기술 개발에 기여한 인물로, 오픈소스 소프트웨어 커뮤니티에 대한 공헌과 루비 온 레일즈의 성공으로 세계적인 인정을 받았다. - 루비 (프로그래밍 언어) - 루비포지
루비포지는 루비 센트럴이 운영하며 오픈 소스 루비 언어 관련 홍보를 지원하는 웹사이트였으나, 2014년 5월 15일에 서비스가 종료되었다. - 빌드 자동화 - GNU 빌드 시스템
GNU 빌드 시스템은 Autoconf, Automake, Libtool 등의 오토툴과 GNU make 등으로 구성되어 다양한 UNIX 시스템에서 소프트웨어 빌드 및 설치를 지원하지만, 복잡성과 이식성에 대한 비판도 존재한다. - 빌드 자동화 - MSBuild
MSBuild는 마이크로소프트에서 개발한 빌드 자동화 도구로서, 프로젝트 파일에 기술된 대상을 실행하여 빌드 과정을 자동화하며, Team Foundation 빌드와 연동하여 팀 빌드 환경을 구성하는 데 사용된다. - 프로그래밍 도구 - SWIG
SWIG는 C/C++ 코드를 다른 프로그래밍 언어에서 사용할 수 있도록 인터페이스를 자동으로 생성해주는 도구로서, 복잡한 데이터 형식 처리, 메모리 관리 등을 지원하며, LLDB, GNU Radio, TensorFlow 등 다양한 프로젝트에서 활용된다. - 프로그래밍 도구 - 소스 코드 편집기
소스 코드 편집기는 구문 강조, 자동 완성, 들여쓰기 등의 기능으로 코드 편집을 용이하게 하고 개발 도구 실행 환경을 제공하며, 텍스트 편집 대신 AST를 조작하는 구조 편집기도 존재한다.
Rake (소프트웨어) - [IT 관련 정보]에 관한 문서 | |
---|---|
기본 정보 | |
이름 | 레이크 |
개발자 | Jim Weirich |
최신 버전 | 13.2.1 |
최신 버전 발표일 | 2024년 4월 5일 |
운영 체제 | 크로스 플랫폼 |
프로그래밍 언어 | 루비 |
장르 | 소프트웨어 개발 도구 |
라이선스 | MIT 라이선스 |
웹사이트 | 레이크 공식 웹사이트 |
2. 기본 개념
Rake의 핵심 구성 요소는 태스크(Task)와 규칙(Rule)이다. 파일이 필수 조건으로 지정되었지만 해당 파일에 대해 정의된 파일 작업이 없는 경우, Rake는 Rakefile에 제공된 규칙 목록을 검토하여 작업을 합성하려고 시도한다.
예를 들어, "mycode.o" 작업을 호출하려고 하는데 해당 작업에 대해 정의된 작업이 없는 경우, Rakefile에 다음과 같은 규칙이 있다면:
```ruby
rule '.o' => '.c' do |t|
sh "cc #{t.source} -c -o #{t.name}"
end
```
이 규칙은 ".o"로 끝나는 모든 작업을 합성한다. 이 규칙은 확장자가 ".c"인 소스 파일이 존재해야 한다는 필수 조건을 갖는다. Rake가 "mycode.c"라는 파일을 찾을 수 있다면, "mycode.c"에서 "mycode.o"를 빌드하는 작업을 자동으로 생성한다. "mycode.c" 파일이 존재하지 않으면 Rake는 해당 파일에 대한 규칙을 재귀적으로 합성하려고 시도한다.[8]
규칙에서 작업이 합성되면 작업의 소스 속성은 일치하는 소스 파일로 설정된다. 이렇게 하면 사용자가 소스 파일을 참조하는 작업과 함께 규칙을 작성할 수 있다.[8]
2. 1. 태스크 (Tasks)
Rake에서 기본적인 단위는 태스크이다. 태스크는 이름과 기능을 정의하는 액션 블록을 가지고 있다. 다음은 "Hello, Rake!" 텍스트를 콘솔에 출력하는 `greet`이라는 태스크를 정의하는 코드이다.[5]```ruby
task :greet do
puts "Hello, Rake!"
end
```
태스크를 정의할 때 선택적으로 종속성을 추가할 수 있다. 즉, 한 태스크가 다른 태스크의 성공적인 완료에 의존할 수 있다. 다음 예시에서 "seed" 태스크를 호출하면 먼저 "migrate" 태스크가 실행된 후 "seed" 태스크가 실행된다.[5]
```ruby
task :seed => :migrate do
# 이 태스크는 :migrate 태스크 이후에 실행됩니다.
end
```
태스크는 인수를 받아들여 더 다재다능하게 만들 수 있다. 예를 들어, "generate_report" 태스크는 날짜를 인수로 받는다. 인수가 제공되지 않으면 현재 날짜가 사용된다.[5]
```ruby
task :generate_report, [:date] do |t, args|
report_date = args[:date] || Date.today
# 지정된 날짜를 기반으로 보고서를 생성합니다.
end
```
파일 생성 태스크를 지정하는 데 사용할 수 있는 특수한 유형의 태스크는 파일 태스크이다. 예를 들어, 다음 태스크는 실행 프로그램을 만들기 위해 "a.o" 및 "b.o"와 같은 두 개의 객체 파일을 제공한다.[6]
```ruby
file "prog" => ["a.o", "b.o"] do |t|
sh "cc -o #{t.name} #{t.prerequisites.join(' ')}"
end
```
또 다른 유용한 도구는 필요에 따라 디렉터리를 생성하는 데 사용할 수 있는 `directory` 편의 메서드이다.[7]
```ruby
directory "testdata/examples/doc"
```
다음은 C 언어의 Hello World 프로그램을 빌드하는 Rake 스크립트의 예시이다.
```ruby
rule '.o' => '.c' do |t|
sh "cc -c -o #{t.name} #{t.source}"
end
file 'hello' => ['hello.o'] do
sh 'cc -o hello hello.o'
end
2. 2. 파일 태스크 (File Tasks)
파일 태스크는 특정 파일을 생성하거나 업데이트하는 데 사용되는 특수한 유형의 태스크이다. 파일의 의존성을 정의하고, 파일이 변경되었을 때만 태스크를 실행하도록 할 수 있다.다음은 C 언어의 Hello World 프로그램을 빌드하는 Rake 스크립트의 예시이다.[6]
```ruby
rule '.o' => '.c' do |t|
sh "cc -c -o #{t.name} #{t.source}"
end
file 'hello' => ['hello.o'] do
sh 'cc -o hello hello.o'
end
2. 3. 규칙 (Rules)
규칙은 파일 확장자를 기반으로 태스크를 자동으로 생성하는 방법을 정의한다. 파일 태스크가 명시적으로 정의되지 않은 경우, Rake는 규칙을 사용하여 해당 파일을 빌드하는 방법을 찾는다. 정규 표현식을 사용하여 복잡한 패턴의 파일 이름을 처리할 수 있다.[8]예를 들어, ".o"로 끝나는 모든 작업을 합성하는 규칙은 다음과 같다. 이 규칙은 확장자가 ".c"인 소스 파일이 존재해야 한다는 필수 조건을 갖는다.
```ruby
rule '.o' => '.c' do |t|
sh "cc #{t.source} -c -o #{t.name}"
end
```
Rake가 "mycode.c"라는 파일을 찾을 수 있다면, "mycode.c"에서 "mycode.o"를 빌드하는 작업을 자동으로 생성한다. "mycode.c" 파일이 존재하지 않으면 Rake는 해당 파일에 대한 규칙을 재귀적으로 합성하려고 시도한다.[8]
규칙에서 작업이 합성되면 작업의 소스 속성은 일치하는 소스 파일로 설정된다. 이렇게 하면 사용자가 소스 파일을 참조하는 작업과 함께 규칙을 작성할 수 있다.[8]
다음은 정규 표현식과 프로시저를 사용하여 소스 파일의 이름을 계산하는 예시이다.
```ruby
rule(/\.o$/ =>
- >(t_name){ t_name.sub /\.o$/, '.c' }) do |t|
sh "cc #{t.source} -c -o #{t.name}"
end
```
다음은 C 언어의 Hello World 프로그램을 빌드하는 Rake 스크립트의 예시이다.[9]
```ruby
rule '.o' => '.c' do |t|
sh "cc -c -o #{t.name} #{t.source}"
end
file 'hello' => ['hello.o'] do
sh 'cc -o hello hello.o'
end
3. 고급 기능
Rake는 사용자가 코드를 더 깔끔하고 모듈화하여 유지보수하기 쉽게 만들 수 있도록 태스크 인수, 네임스페이스 등의 고급 기능을 제공한다.
3. 1. 태스크 인수
태스크는 인수를 받아들여 더 다재다능하게 만들 수 있다.[5] 예를 들어, "generate_report" 태스크는 날짜를 인수로 받는데, 인수가 제공되지 않으면 현재 날짜가 사용된다.[5]```ruby
task :generate_report, [:date] do |t, args|
report_date = args[:date] || Date.today
# 지정된 날짜를 기반으로 보고서를 생성합니다.
end
3. 2. 네임스페이스 (Namespaces)
네임스페이스는 태스크를 논리적으로 그룹화하여 `Rakefile`을 더 체계적으로 구성하는 데 사용된다.[10] 다음은 간단한 Rake 레시피의 예시이다.```ruby
namespace :cake do
desc '팬케이크 만들기'
task :pancake => [:flour, :milk, :egg, :baking_powder] do
puts "지글"
end
task :butter do
puts "버터 3 테이블스푼을 작은 사각형으로 자르기"
end
task :flour => :butter do
puts "손을 사용하여 버터 사각형을 밀가루 1 1/2컵에 반죽하기"
end
task :milk do
puts "우유 1 1/4컵 추가"
end
task :egg do
puts "달걀 1개 추가"
end
task :baking_powder do
puts "베이킹 파우더 3 1/2 티스푼 추가"
end
end
4. 예제
ruby
file 'hello.o' => 'hello.c' do
sh 'cc -c -o hello.o hello.c'
end
file 'hello' => 'hello.o' do
sh 'cc -o hello hello.o'
end
```
실행해야 할 작업은 `Rakefile`이라는 구성 파일에 정의해야 한다.[4]
다음은 C 언어의 Hello World 프로그램을 빌드하는 Rake 스크립트의 예시이다.
```ruby
rule '.o' => '.c' do |t|
sh "cc -c -o #{t.name} #{t.source}"
end
file 'hello' => ['hello.o'] do
sh 'cc -o hello hello.o'
end
참조
[1]
웹사이트
Release v13.2.1 · ruby/rake · GitHub
https://github.com/r[...]
2024-06-21
[2]
웹사이트
Rake -- Ruby Make
https://ruby.github.[...]
2024-02-28
[3]
웹사이트
NEWS
https://svn.ruby-lan[...]
2024-02-29
[4]
웹사이트
Rakefile Format
https://github.com/r[...]
2024-06-21
[5]
웹사이트
Ruby on Rails Tutorial: Understanding Rake and Task Automation
https://clouddevs.co[...]
2024-06-21
[6]
웹사이트
Rakefile Format # File Tasks
https://github.com/r[...]
2024-06-21
[7]
웹사이트
Rakefile Format # Direcpory Tasks
https://github.com/r[...]
2024-06-21
[8]
웹사이트
Rakefile Format # Rules
https://github.com/r[...]
2024-06-21
[9]
웹사이트
Rakefile Format # Advanced Rules
https://github.com/r[...]
2024-06-21
[10]
웹사이트
Rakefile Format # Namespaces
https://github.com/r[...]
2024-06-21
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com