From: Joe Van Dyk Date: 2005-07-15T15:56:04+09:00 Subject: rake question 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?