- argv.push_back(exe.get_name());
- const list<Target *> &deps=exe.get_depends();
- for(list<Target *>::const_iterator i=deps.begin(); i!=deps.end(); ++i)
- if(dynamic_cast<ObjectFile *>(*i))
- argv.push_back((*i)->get_name());
+ argv.push_back(relative(bin.get_path(), work_dir).str());
+ const TargetList &deps = bin.get_depends();
+ for(TargetList::const_iterator i=deps.begin(); i!=deps.end(); ++i)
+ {
+ Target *tgt = *i;
+ if(Install *inst = dynamic_cast<Install *>(tgt))
+ tgt = &inst->get_source();
+
+ if(ObjectFile *obj = dynamic_cast<ObjectFile *>(tgt))
+ argv.push_back(relative(obj->get_path(), work_dir).str());
+ else if(StaticLibrary *stlib = dynamic_cast<StaticLibrary *>(tgt))
+ argv.push_back(stlib->get_path().str());
+ else if(Library *lib = dynamic_cast<Library *>(tgt))
+ argv.push_back("-l"+lib->get_libname());
+ }