首页 > 解决方案 > 如何使用 ExternalProject_Add 进行简单的 make 调用?

问题描述

我需要 ExternalProject_Add 来为一个外部项目调用一个命令,该项目的 makefile 完成了所有需要的步骤。我需要在外部项目的源代码树顶部的目录中将该命令设置为“make WITH_OPTION1=no WITH_OPTION2=no”。这是我们使用的几十个外部项目之一。他们中的大多数都符合'configure; 制作; 进行安装',但第三个不这样做,这是我认为很容易的一个。

如果我尝试像这样调用 make 命令:

   ExternalProject_Add(build-example
        PREFIX "${CMAKE_CURRENT_BINARY_DIR}/example"
        DEPENDS ""
        SOURCE_DIR "${PROJECT_TOPDIR}/External/example"
        CONFIGURE_COMMAND ""
        BUILD_COMMAND COMMAND make WITH_OPTION1=no WITH_OPTION2=no
        INSTALL_COMMAND "")

生成的 make 步骤是从错误的目录完成的,因此找不到 Makefile。

如果我在 make 命令中添加一个 -C 选项,它似乎使用了正确的目录,但它忽略了 WITH_OPTION 的东西。这不能正确编译,因为这些功能使用了我不想提供的东西,如果它确实有效,我仍然不想要这些功能。

如果我然后在整个所需的 make 命令周围添加引号,则会出错。显然,该命令以 sh 失败的方式传递给“sh”。

如果我使用一种机制将命令传递到“配置文件”步骤并从 BUILD_COMMAND 调用该文件,那么 CMake 实际上会尝试使用外部项目中损坏的 CMakeLists.txt 文件,我想知道是什么让 CMake 思考它应该这样做。

我只想正确调用makefile,使用CMake在构建完整项目必须完成的数十个其他构建中组织该构建。

标签: cmake

解决方案


推荐阅读