diff --git a/interpreter.py b/interpreter.py index 0425f2e9a..601c5d036 100755 --- a/interpreter.py +++ b/interpreter.py @@ -38,7 +38,7 @@ class BuildTarget(InterpreterObject): self.name = name self.sources = sources self.external_deps = [] - + def get_basename(self): return self.name diff --git a/shellgenerator.py b/shellgenerator.py index 1fe5bee8c..3ce208034 100755 --- a/shellgenerator.py +++ b/shellgenerator.py @@ -50,7 +50,7 @@ class ShellGenerator(): if compiler is None: raise RuntimeError('No specified compiler can handle file ' + src) abs_src = os.path.join(self.environment.get_source_dir(), src) - abs_obj = os.path.join(self.environment.get_build_dir(), src) + abs_obj = os.path.join(self.get_target_dir(target), src) abs_obj += '.' + self.environment.get_object_suffix() commands = [] commands += compiler.get_exelist() @@ -80,19 +80,25 @@ class ShellGenerator(): outfile.write('\necho Linking \\"%s\\".\n' % outname) outfile.write(' '.join(quoted) + ' || exit\n') + def get_target_dir(self, target): + dirname = os.path.join(self.environment.get_build_dir(), target.get_basename()) + os.makedirs(dirname, exist_ok=True) + return dirname + def generate_commands(self, outfile): for i in self.interpreter.get_targets().items(): name = i[0] - e = i[1] + target = i[1] print('Generating target', name) - outname = os.path.join(self.environment.get_build_dir(), e.get_basename()) + targetdir = self.get_target_dir(target) + outname = os.path.join(targetdir, target.get_basename()) suffix = self.environment.get_exe_suffix() if suffix != '': outname = outname + '.' + suffix obj_list = [] - for src in e.get_sources(): - obj_list.append(self.generate_single_compile(e, outfile, src)) - self.generate_link(e, outfile, outname, obj_list) + for src in target.get_sources(): + obj_list.append(self.generate_single_compile(target, outfile, src)) + self.generate_link(target, outfile, outname, obj_list) if __name__ == '__main__': code = """ diff --git a/test cases/1 trivial/trivial.c b/test cases/1 trivial/trivial.c index 363dac39d..5c2fa9bb6 100644 --- a/test cases/1 trivial/trivial.c +++ b/test cases/1 trivial/trivial.c @@ -1,3 +1,3 @@ -int main(int argv, char **argv) { +int main(int argc, char **argv) { return 0; }