本发明涉及一种基于prompt的自动编译构建c/c++项目方法,尤其涉及在处理大型工程项目的编译运行时可以自动化进行项目编译构建,无需手动操作,属于计算机软件。
背景技术:
1、目前,cmake,cmakelists.txt,makefile,和make是用于构建和管理c/c++项目的工具和文件。cmake是一个跨平台的开源构建工具,可以生成与不同构建系统兼容的构建文件。cmake使用名为cmakelists.txt的配置文件来描述项目的构建过程和依赖关系。cmakelists.txt是cmake的配置文件,其中包含了一系列指令,用于描述项目的目录结构、编译选项、链接库、生成可执行文件等。cmake通过读取cmakelists.txt文件来生成适合特定构建系统的构建文件。
2、cmakelists.txt通常需要由开发者手动编写,学习如何编写cmakelists.txt需要投入时间和精力,其中定义了项目的编译规则、依赖关系和操作步骤。cmakelists.txt具有跨平台性、模块化和可配置性等优点,也存在一些学习曲线和一致性方面的缺点。然而,它仍然是一个广泛使用的构建系统工具,被许多开发人员和项目使用来管理复杂的构建过程。尽管cmakelists.txt可以生成常见的构建系统文件,如makefile或visual studio解决方案,但这些文件的可读性通常较差。这使得阅读和理解生成的构建系统文件变得困难,特别是对于不熟悉cmake的人来说。
3、大语言模型是指在深度学习领域中,使用大规模数据和强大的神经网络结构来训练的能够理解和生成自然语言文本的模型。在过去几年中,随着深度学习技术的发展,大语言模型取得了显著的进步。随着transformer模型的出现,大语言模型的性能得到了飞跃性的提升。transformer模型引入了自注意力机制,能够更好地捕捉文本中的长期依赖关系,因此在自然语言处理任务中取得了令人瞩目的成绩。在此基础上,chatgpt作为一种基于gpt(generative pre-trained transformer)的变体,进一步扩展了大语言模型的应用范围。chatgpt是由openai团队开发的,它是一个面向对话的语言模型,通过对大量对话数据进行预训练,使得模型能够生成连贯、富有逻辑的对话内容。chatgpt的问答能力、语言理解和生成能力使得它在客服聊天机器人、语言辅助工具和创意文本生成等方面具有广泛的应用潜力。
4、prompt是指在使用大语言模型时,向模型提供一个特定格式或问题陈述,以引导模型生成特定类型的回复或输出。通过合理设计和使用prompt,可以使得大语言模型更好地适应不同的应用场景,并为用户提供更加智能和个性化的交互体验。在此基础上,许多基于prompt的解决问题的方法被提出。
5、专利公开号为cn103279356a的文献提出了一种makefile文件的自动生成方法,通过对样本软件进行分析以获得所述样本软件makefile文件,并根据makefile文件得到的编译标准信息和待开发软件配置信息生成待开发软件对应的makefile文件。虽然降低了学习成本,提高了工作效率,但是仍然存在使用门槛,想要高效正确地完成项目的编译构建,仍然需要足够的技术积累和一定的学习成本。
6、专利公开号为cn101697125a的文献公开了一种开发环境转换的方法,在sdk的makefile中增加输出编译参数的规则,使ide中的编译器可以根据所述编译参数自动生成makefile。该发明还同时公开了一种开发环境转换的装置。使用该发明所述的方法和装置,能够降低将sdk中的工程转换至ide所需的时间及劳动量。但是需要在特定的ide编辑器上安装sdk,导致使用范围较为局限,并且仍需要一定的学习成本。
技术实现思路
1、为了克服现有的配置文件cmakelists.txt需要花费时间学习和编写,生成makefile文件可读性较差的问题,本发明的目的在于提供一种基于prompt的自动编译构建c++项目方法,可以根据不同的项目自动生成项目需要的配置文件cmakelists.txt进而自动话完成项目的编译构建,无需再手动编写配置文件cmakelists.txt,提高了项目组织调试的效率,减少了学习成本和维护成本。
2、本发明结合大语言模型强大的问题分析和解决能力,通过设计合理有效的prompt范式以及完整的工作流程,可以自动生成整个项目的cmakelists.txt。可以极大程度降低编写cmakelists.txt的学习成本,并且通过大语言模型可以结合上下文的能力,可以自动完成纠错。最终达到使初步涉猎c/c++项目编译构建领域的工作人员可以无需花费时间学习cmake相关语法,只需要对项目构成有足够了解就可以完成项目的编译构建的效果。
3、本发明解决其技术问题所采用的技术方案是:
4、一种基于prompt的自动编译构建c++项目方法,其步骤包括:
5、1)根据待编译项目中各项目模块的依赖关系生成依赖关系图;
6、2)根据依赖关系图选择当前没有前置依赖的项目模块;
7、3)根据所选大语言模型构建初始prompt范式,根据初始prompt范式和待编译项目的项目目录生成相应初始prompt并将其输入所述大语言模型,自动生成当前项目模块的cmakelists.txt文件;
8、4)根据项目模块的cmakelists.txt文件对该项目模块进行编译构建,构建成功则执行步骤5),否则跳转至步骤3)并修改promt重新生成当前项目模块的cmakelists.txt文件;
9、5)对该项目模块进行单元测试,单元功能正确代表测试通过,测试通过则执行步骤
10、6),否则得到错误信息跳转至步骤3)并修改promt重新生成当前项目模块的cmakelists.txt文件;
11、6)判断该项目模块是否依赖子模块,如果存在依赖子模块则执行步骤7),否则跳转至步骤8);
12、7)对该项目模块及其子模块进行集成测试,功能正确代表测试通过,测试通过则执行步骤8),否则得到错误信息跳转至步骤3)并修改promt重新生成当前项目模块的cmakelists.txt文件;
13、8)从所述依赖关系图中移除构建完成的项目模块;
14、9)根据更新后的依赖关系图判断所述待编译项目是否存在无依赖且未构建的项目模块,若不存在则执行步骤10),否则跳转至步骤2);
15、10)对编译后的项目进行项目系统测试,若通过则正确生成完毕,若测试失败则得到错误信息并且执行步骤11);
16、11)结合错误信息对出错的项目模块重新编译构建,并跳转至步骤10)。
17、进一步的,生成当前项目模块的cmakelists.txt文件的方法为:
18、21)通过自动读取项目文件目录结构,再通过初始prompt范式补全生成所述初始prompt并将其输入所述大语言模型,生成对应的cmakelists.txt;
19、22)基于cmakelists.txt对当前项目模块进行编译构建,若通过则正确生成完毕;若构建失败则执行步骤23);
20、23)结合失败信息修改prompt并将其输入所述大语言模型,得到纠错后的cmakelists.txt;
21、24)基于纠错后的cmakelists.txt对当前项目模块进行编译构建,若通过则正确生成完毕;若失败则跳转至步骤23)执行。
22、进一步的,所述prompt范式的连接语中包括目录结构格式、目录结构内容解释、c/c++项目编译构建所需要的cmakelists.txt示例。
23、进一步的,修改后的prompt的内容包含项目模块目录结构、项目模块依赖信息、已生成的有误cmakelists.txt、编译失败信息以及prompt范式连接语。
24、进一步的,步骤2)中,根据依赖关系图确定编译构建优先级并选择当前没有前置依赖的项目模块;其中,无前置依赖的项目模块优先级最高。
25、进一步的,所述大语言模型为chatgpt。
26、进一步的,所述依赖关系包括包含子目录、依赖库文件、依赖可执行文件、排除构建文件;所述包含子目录是指项目模块自身依赖的已完成cmakelists.txt的子模块;所述依赖库文件是指项目中引入的第三方库文件,所述第三方库文件为静态库或动态库;所述依赖可执行文件是指项目模块依赖的文件为可执行文件;所述排除构建文件是指显示指明的排除项目构建的子文件目录。
27、一种服务器,其特征在于,包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行上述方法中各步骤的指令。
28、一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述方法的步骤。
29、本发明基于prompt的自动编译构建c++项目方法,可以自动生成项目的cmakelists.txt文件,从而生成项目的makefile文件使项目可以按正确顺序编译运行。所述项目通常会有很多源文件,有时也会按功能、类型、模块分门别类的放在不同的目录中,有时候也会在一个目录里存放了多个程序的源代码。所述prompt为使用大语言模型输入的prompt,大语言模型通过给出的prompt自动生成项目的cmakelists.txt文件。
30、初始的prompt由自动读取项目文件目录结构,再通过预设范式补全自动生成。
31、得到初始prompt后会自动输入大语言模型,得到该目录结构下的cmakelists.txt。
32、自动生成的cmakelists.txt的正确性在项目编译构建时验证,如果编译构建成功,则cmakelists.txt自动生成完成。若编译失败,则会得到错误信息,将错误信息和已生成的cmakelists.txt作为补充的prompt再次输入大语言模型得到纠错后的cmakelists.txt。
33、项目的规模可能会很大,此时需要对项目的不同功能模块从底层到高层依次生成需要的cmakelists.txt,手动编写时的步骤相同。
34、本发明的项目模块处理流程如下:
35、步骤一:选择需要编译构建的项目模块。
36、步骤二:构建初始prompt范式。
37、步骤三:是否配置好大语言模型接口,若没有则执行步骤四,若已配置完成则跳到步骤五执行。
38、步骤四:添加大语言模型接口。
39、步骤五:根据初始prompt范式和项目目录生成相应初始prompt。
40、步骤六:根据初始prompt自动生成对应的cmakelists.txt。
41、步骤七:基于cmakelists.txt对当前项目模块进行项目编译构建,若通过则正确生成完毕,执行步骤十,若构建失败则执行步骤八。
42、步骤八:结合失败信息得到改进后的prompt。
43、步骤九:根据补充后的prompt得到纠错后的cmakelists.txt,跳转至步骤七。
44、本发明与现有技术相比的优点在于:
45、本发明涉及一种基于prompt的自动编译构建c/c++项目方法,适用于项目的cmakelists.txt自动生成。当需要相应的makefile文件来进行项目的构建编译时,可以使用该方法和系统自动生成对应的cmakelists.txt文件,从而得到相应的makefile文件来完成项目的编译构建,无需手动编写makefile文件。
46、makefile本身存在需要花时间学习、生成的构建系统文件可读性较差的缺点,使初学者在进行项目编译构建前需要花大量的时间进行此方面的学习,才能独立完成项目编译构建或修改的工作。本发明使工作者无需再学习makefile编写方式,只需对项目本身有一定了解即可以完成项目编译的构建,极大的降低了学习成本和维护成本。
1.一种基于prompt的自动编译构建c++项目方法,其步骤包括:
2.根据权利要求1所述的方法,其特征在于,生成当前项目模块的cmakelists.txt文件的方法为:
3.根据权利要求1或2所述的方法,其特征在于,所述prompt范式的连接语中包括目录结构格式、目录结构内容解释、c/c++项目编译构建所需要的cmakelists.txt示例。
4.根据权利要求1或2所述的方法,其特征在于,修改后的prompt的内容包含项目模块目录结构、项目模块依赖信息、已生成的有误cmakelists.txt、编译失败信息以及prompt范式连接语。
5.根据权利要求1所述的方法,其特征在于,步骤2)中,根据依赖关系图确定编译构建优先级并选择当前没有前置依赖的项目模块;其中,无前置依赖的项目模块优先级最高。
6.根据权利要求1所述的方法,其特征在于,所述大语言模型为chatgpt。
7.根据权利要求1所述的方法,其特征在于,所述依赖关系包括包含子目录、依赖库文件、依赖可执行文件、排除构建文件;所述包含子目录是指项目模块自身依赖的已完成cmakelists.txt的子模块;所述依赖库文件是指项目中引入的第三方库文件,所述第三方库文件为静态库或动态库;所述依赖可执行文件是指项目模块依赖的文件为可执行文件;
8.一种服务器,其特征在于,包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行权利要求1至7任一所述方法中各步骤的指令。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一所述方法的步骤。
