示例#1
0
文件: cppmake.py 项目: Donaim/makepy
    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
示例#2
0
文件: cppmake.py 项目: Donaim/makepy
    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
示例#3
0
文件: test.py 项目: Donaim/makepy
    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)
示例#4
0
文件: cppmake.py 项目: Donaim/makepy
 def get_clean_part(self):
     return mp.make_make_rule('clean', [''],
                              ['- rm -rf "{}"'.format(self.targets_prefix)])
示例#5
0
文件: cppmake.py 项目: Donaim/makepy
 def get_all_part(self, link_target: str) -> str:
     return mp.make_make_rule('all', ['make_dirs', link_target],
                              ['@ echo "all finished"'])
示例#6
0
文件: test.py 项目: Donaim/makepy
 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')