rule '.o' => ['.c'] do |t|
sh "cc #{t.source} -c -o #{t.name}"
end
But, when I change the .c source file, it doesn't get compiled again.
Why is that?
Example:
PowerBook:~/that_stuff/test1 joe$ ls
Rakefile another_test.h test.cpp
another_test.cpp main.cpp test.h
PowerBook:~/that_stuff/test1 joe$ cat Rakefile
require 'rake/clean'
CLEAN.include '*.o', 'test'
CPP_SOURCE = FileList['*.cpp']
OBJS = CPP_SOURCE.ext 'o'
task :default => :run
task :run => "test" do
sh "./test"
end
file "test" => OBJS do
sh "g++ -o test #{OBJS}"
end
rule '.o' => '.cpp' do |t|
sh "g++ -c -o #{t.name} #{t.source}"
end
CPP_SOURCE.each do |cpp|
headers = File.read(cpp).scan(/^#include "(.+)"/)
task cpp => headers
end
PowerBook:~/that_stuff/test1 joe$ rake
(in /Users/joe/that_stuff/test1)
g++ -c -o another_test.o another_test.cpp
g++ -c -o main.o main.cpp
g++ -c -o test.o test.cpp
g++ -o test another_test.o main.o test.o
./test
Whassup
what's up!
PowerBook:~/that_stuff/test1 joe$ touch main.cpp
PowerBook:~/that_stuff/test1 joe$ rake
(in /Users/joe/that_stuff/test1)
./test
Whassup
what's up!
It should've recompiled main.cpp and relinked everything, right?