2017-02-06 70 views
0

在构建我自己的项目时需要使用第三方makefile的一些帮助。包括使用cmake时的makefile

+0

“我尝试使用以下内容,但它不起作用......”它不起作用?你期望发生什么?发生了什么? – nega

+0

你必须告诉cmake如何解释gmake + makefile在做什么。 CMake不仅会奇迹般地导入一些随机字符串。它会如何知道这样做是正确的?它会如何安全地做到这一点?也许如果你提供了gmake + makefile输出的例子,你想用这个输出做什么? – nega

+0

“干什么”是什么意思?只是打印到终端?用这些标志重建你的第三方库?将这些标志写入文件? – nega

回答

1

有没有办法直接到你想要的。 CMake不提供将文件包含到生成文件中的功能。 (即:将一个“3rdparty.mk”包含到CMake生成的Makefile中。)您也不能直接在“CMakeLists.txt”中包含“生成文件类型”(即:生成文件)。 CMake的ExternalProject不会让你这样做。

您需要做的是以某种方式“解析”具有您所需信息的生成文件。有很多方法可以做到这一点。例如,您可以编写一个shell脚本包装器,它可以根据需要为您的makefile生成grep文件,然后用您想要定义的变量构建一个CMake命令行,并输出它或者为您调用cmake。根据您对shell(或perl,python等)的使用感觉如何,您可能会觉得这是最好的选择。

如果您知道这些值永远不会(或很少更改),您可以将它们硬编码到您的CMakeLists.txt(不推荐)或文件中,您可以include()(更好)。

你也可以留在CMake-land并使用CMake的ExternalProject来帮助你。使用ExternalProject,您可以:

  1. 获取您的第三方库(下载,复制,解压缩等)
  2. 修补这些图书馆的Makefile文件
  3. 运行make这些补丁的makefile

现在,我提到的这个补丁是你必须自己写的东西,并保持你的主要项目的来源。这个补丁的内容将成为一个新的目标,使编写一个文件,您可以通过include()包含在您的CMakeLists.txt中。你可以简单地开始,并有这个新的目标(例如:make output_variables)写一个set()命令列表lib_A.cmake。对此感到满意后,你可以转向更复杂的输出;比如写一个CMake的find_package()会理解的lib_A-config.cmake文件。

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