【问题标题】:Store GNU make generated files elsewhere将 GNU make 生成的文件存储在别处
【发布时间】:2009-08-21 10:43:26
【问题描述】:

如何将 GNU make & configure 文件存储在其他地方?我有一个正在处理的项目,我使用以下方法编译:

./configure --prefix=/usr && make && su -c 'make install'

问题是我不想污染当前文件夹,这是一个 svn/git/hg/whatever 沙箱,其中包含该命令生成的文件。我想把这些文件放在一个单独的位置。我不知道它是否相似,但是当我从源代码编译 linux 内核时,我可以通过将 'O' 选项传递给 'make' 来指定放置输出的位置,如下所示:

make O=/home/user/linux-output

【问题讨论】:

    标签: linux makefile


    【解决方案1】:

    Makefile 必须支持此功能。

    认为autoconf生成的makefile都支持以下用途:

    mkdir ../build
    cd ../build
    ../configure --prefix=/usr
    make
    make install
    

    (当然推荐用于 gcc 构建)。

    【讨论】:

    • 这会将 Makefile 和生成的二进制文件移动到一个单独的目录中。然而,它自己的配置脚本和 Makefile.in 仍然会“污染”源代码树。
    • 是的,Douglas,你是对的,.in、.m4 文件(如果使用)仍将在源代码树中。
    • 这称为 vpath 构建,只有在开发人员正确编写包的情况下才能工作。当您是包的维护者时,您有责任确保 vpath 构建工作。
    • 您可以看到一个更完整的工作示例(编译 GNU hello)显示源代码树可以保持严格不修改。
    【解决方案2】:

    正如 Kristof 已经指出的那样,GNU 自动工具天生支持 configure 级别的树外构建。

    因此,您可以轻松地从源代码树中获取 Makefile 和构建的二进制文件。

    然而,要从源代码树中获取所有自动生成的人工制品需要更多的工作。

    我们有一个脚本,可以将更改从源代码树复制到 working_copy,小心地将配置脚本等保存在 working_copy 中,从而使原始源代码树保持原始状态。但是效率很低,所以不推荐。

    我会推荐一个正常的树外构建,然后明确排除源树中剩余的自动生成文件。

    【讨论】:

    • Autoconf 不支持 vpath 构建。 Automake 可以,虽然 automake 经常与 autoconf 结合使用,但并非总是如此。
    • 我没有说vpath,我说的是out-of-tree。显然,允许创建可以执行 vpath 的 Makefile 的位是 automake,但我认为支持运行树外配置必须是 autoconf?
    • 我会将 autoconf 更改为 autotools,因为这是一项合作努力。
    猜你喜欢
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    相关资源
    最近更新 更多