You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为ExternalProject_Add的CONFIGURE_COMMAND设置工作目录?

解决ExternalProject_Add调用Automake configure时相对路径资源找不到的问题

我之前也碰到过一模一样的坑!Automake的configure脚本依赖源码目录里的相对路径资源,但ExternalProject_Add默认会在构建目录(也就是CMAKE_CURRENT_BINARY_DIR下的子目录)里运行configure,自然找不到源码目录里的文件。给你几个靠谱的解决办法:

方法1:指定configure的工作目录为源码目录

ExternalProject_Add允许你通过CONFIGURE_COMMAND手动指定configure的执行命令,同时用WORKING_DIRECTORY参数把工作目录切换到源码目录。比如你的zlib例子可以改成这样:

ExternalProject_Add(zlib
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
    CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/configure
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    # 其他必要参数比如BUILD_COMMAND、INSTALL_COMMAND等
)

这样configure就会在源码目录里运行,和你手动执行./configure的环境完全一致,相对路径就能正常解析了。

方法2:给configure传递绝对路径参数

如果不想改变工作目录,你可以修改configure的调用参数,把依赖的资源文件路径改成绝对路径。比如如果configure脚本里用到了--with-resource=./res/file.txt,你可以改成:

ExternalProject_Add(zlib
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
    CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/configure --with-resource=${CMAKE_CURRENT_SOURCE_DIR}/res/file.txt
    # 其他参数
)

这种方法适合只需要修改少数路径参数的情况,灵活性比较高。

方法3:修改Automake项目的configure脚本(如果有权限的话)

如果能修改目标Automake项目的configure.ac或者configure脚本,可以把里面的相对路径改成基于srcdir变量的路径——Automake生成的configure脚本里会自动设置srcdir变量指向源码目录的绝对路径。比如原来的./res/file.txt可以改成${srcdir}/res/file.txt,这样不管在哪个目录运行configure,都能正确找到资源文件。

这三种方法里,我个人最常用第一种,简单直接,能最大程度保留原项目的构建逻辑,不容易出其他问题。

内容的提问来源于stack exchange,提问作者the_storyteller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:11:12