使用cmake时包含makefile

使用cmake时包含makefile,makefile,cmake,Makefile,Cmake,在构建我自己的项目时,需要一些关于使用第三方makefile的帮助。没有一种方法可以直接满足您的需求。CMake不提供将文件包含到其生成的文件中的工具。ie:将3rdparty.mk包含到CMake生成的生成文件中。也不能直接将生成的文件类型(即Makefile)包含到CMakeLists.txt中。CMake也不会让你这么做的 您需要做的是以某种方式解析包含所需信息的makefile。有很多方法可以做到这一点。例如,您可以编写一个shell脚本包装器,根据需要对makefile进行grep,然

在构建我自己的项目时,需要一些关于使用第三方makefile的帮助。

没有一种方法可以直接满足您的需求。CMake不提供将文件包含到其生成的文件中的工具。ie:将3rdparty.mk包含到CMake生成的生成文件中。也不能直接将生成的文件类型(即Makefile)包含到CMakeLists.txt中。CMake也不会让你这么做的

您需要做的是以某种方式解析包含所需信息的makefile。有很多方法可以做到这一点。例如,您可以编写一个shell脚本包装器,根据需要对makefile进行grep,然后使用您想要定义的变量构造一个CMake命令行,并输出它或为您调用CMake。根据您对shell或perl、python等的熟悉程度,您可能会觉得这是最好的选择

如果您知道这些值永远不会或很少改变,您可以将它们硬编码到您的CMakeLists.txt not recommended中,或者硬编码到您可以更好地使用的文件中

你也可以留在CMake的土地上,利用CMake的帮助你。使用ExternalProject,您可以:

获取您的第三方库下载、复制、解压缩等 修补这些库的makefile 在修补过的makefile上运行make 现在,我提到的这个补丁是你必须自己编写的,并且保留主要项目的源代码。此修补程序的内容将成为make的新目标,它将编写一个文件,您可以通过include将其包含在您的CMakeLists.txt中。您可以简单地开始,并使用这个新的make目标,例如:make output_variables将set命令列表写入lib_a.cmake。在熟悉了这一点之后,您可以继续进行更复杂的输出;比如写一个lib_a-config.cmake文件,让cmake能够理解


诚然,最后一个选项可能是最复杂的,但它可能会使主要项目的维护更容易,减少将来的痛苦。您还将对CMake有更深入的了解。

我尝试使用以下方法,但不起作用。。。它怎么不起作用?你以为会发生什么?发生了什么?你必须告诉cmake如何解释gmake+makefile在做什么。CMake不仅仅会神奇地导入一些随机字符串。它如何知道如何正确地做到这一点?它如何安全地做到这一点?也许如果你提供了一个gmake+makefile输出的例子,你想用这个输出做什么?你所说的做是什么意思?只是打印到终端?用这些标志重建第三方库?将这些标志写入文件?