def get_compile_part(self, inited_dirs: list) -> str: compile_targets = '' make_dirs_list = set() for i, d in enumerate(inited_dirs): inclname = 'INCL' + str(i) incl = inclname + '= ' + reduce( lambda a, b: a + ' -I ' + b.dirpath, d.params.include_dirs, '') compile_targets += incl + '\n\n' ccommands = self.compile_commands ccommands[0] = ccommands[0] + ' $({})'.format(inclname) for f in d.files: ff = IncludeFile(f, f, None) deps = get_all_make_dependencies(ff, d.params.include_dirs) target = self.__get_o_target(f) target_dir = path.dirname(target) make_dirs_list.add(target_dir) compile_targets += mp.make_make_rule(target, deps, self.compile_commands) compile_targets += '\n\n' make_dirs_list_str = ' '.join( map(lambda x: "'" + x + "'", make_dirs_list)) makedirs_part = mp.make_make_rule( 'make_dirs', [''], ['mkdir -p {}'.format(make_dirs_list_str)]) return makedirs_part + '\n\n' + compile_targets
def get_link_part(self, link_target: str, inited_dirs: list) -> str: re = '' re += 'LIBS=' + ' '.join(self.libs) + '\n' re += 'LIBS_FMT=' + ' -L '.join([''] + self.libs) + '\n' all_files = reduce(lambda acc, d: acc + d.files, inited_dirs, []) link_deps = list(map(self.__get_o_target, all_files)) re += 'LINK_DEPS=' + ' '.join(link_deps) + '\n\n' re += mp.make_make_rule(link_target, ['$(LINK_DEPS)', '$(LIBS)'], self.link_commands) return re
def test_get_file_makerule(self): file = cppmake.IncludeFile('testproj/src/main.c', 'testproj/src/main.c', makepy_lib.IncludeDir('testproj/src')) deps = list(cppmake.get_all_dependencies(file, self.idirs)) names = list(map(lambda f: f.abs_path, deps)) # print(names) make_names = cppmake.get_all_make_dependencies(file, self.idirs) r = makepy_lib.make_make_rule(file.abs_path.replace('.c', '.o'), make_names, ["echo kek"]) print(r)
def get_clean_part(self): return mp.make_make_rule('clean', [''], ['- rm -rf "{}"'.format(self.targets_prefix)])
def get_all_part(self, link_target: str) -> str: return mp.make_make_rule('all', ['make_dirs', link_target], ['@ echo "all finished"'])
def test_makerule(self): r = makepy_lib.make_make_rule('test.c', ['test.h', 'string.h', 'hello.h.h'], ['$(CC) -c $@', '@ echo compiled $@']) print('\n\n', r, '\n')