foundation-tasking / rakefile

# constants

COMPILER = "g++"
EXEC = "unit_test"
FLAGS = "-Wall -Wextra -g"

OBJECTS = %w(unit_test.o memory.o)
HEADERS = %w(array.h collection_types.h memory.h memory_types.h types.h temp_allocator.h hash.h)

# tasks

task :build => [EXEC]

task :test => :build do
	sh "./#{EXEC}"
end

task :default => :test

desc "Clean stuff"
task :clean do
	files = (Dir["*.o"] + Dir["#{EXEC}"]).uniq
	rm_f files unless files.empty?
end

# rules

rule '.o' => '.cpp' do |target|
	sh "#{COMPILER} #{FLAGS} -c -o #{target.name} #{target.source}"
end

file EXEC => OBJECTS do
	sh "#{COMPILER} #{FLAGS} #{OBJECTS.join(" ")} -o #{EXEC}"
end

# dependencies

file 'unit_test.o' => %w(unit_test.cpp) + HEADERS
file 'memory.o' => %w(memory.cpp) + %w(types.h memory_types.h memory.h)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.