cmake - 如何使用 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在构建完整项目必须完成的数十个其他构建中组织该构建。
解决方案
推荐阅读
- java - 在 Java 中,为什么公共接口必须是文件中声明的唯一公共接口,为什么文件必须与该接口同名?
- angularjs - AngularJS:主页加载后加载更多数据
- c - c中的程序打印带有*模式的x和y的矩形
- python - 如何解决 pip 本身的版本冲突?
- node.js - Docker:尝试使用 docker 访问 mongoDB 时未处理的 Promise 拒绝
- node.js - 如何从 mongodb 中获取比特定文档更新的文档?节点/猫鼬
- ios - iOS Xamarin 将 tabBar 推送到导航控制器上
- function - 查询访问中的 IIF 函数
- fortran - 溢出检测的 64 位浮点数的最大值
- javascript - 下拉菜单(选择插件)在反应表中被切断