【问题标题】:Variable directory path for AC_CONFIG_FILES in configure.acconfigure.ac 中 AC_CONFIG_FILES 的可变目录路径
【发布时间】:2013-10-25 15:58:50
【问题描述】:

我正在用 C++ 编写一个小工具。它实际上更像是一个对定制开放的框架。它具有以下目录结构(简化示例)。

src/  
   main/myexec          # linked to libapple.so
   apple/  
        coder/libapple.so  
        john/libapple.so  
          .  
          .  
        james/libapple.so  

这里,目录“coder”是一个通用的虚拟对象,带有一些示例代码来生成 libapple.so。不同的用户可以签出这个工具,创建自己的目录,从“coder”复制模板代码并根据需要进行自定义。根据配置选项(表示用户),需要生成各自的libapple.so。

正如我所提到的,这是一个简化的示例。这不是通用编程、继承等问题。事实上,类似于“apple”文件夹,还有其他类似“scripts”、“docs”、“configs”等,每个文件夹都有类似的用户特定文件夹。此外,该工具将维护在单个存储库位置,以允许我支持和维护所有非特定于用户的代码。作为一项政策,用户只能修改和签入其文件夹的内容。

我面临的问题是“configure.ac”。我不想使用“AC_ARG_WITH”选项,因为它需要每个新用户编辑 configure.ac。此外,对于每个用户,AC_CONFIG_FILE 条目将完全相同,除了他的文件夹名称。我尝试使用“--enable-user=User”,然后使用 AC_SUBST(USERDIR),这也有助于在 Makefile.am 中设置“SUBDIRS = @USERDIR@”。一切看起来都不错,除了当我指定“AC_CONFIG_FILE = ([apple/${USERDIR}/Makefile])”时没有在用户文件夹下创建“Makefile.in”这一事实。

请建议如何解决这个问题。在最坏的情况下,我最终可能会创建软链接:(

【问题讨论】:

  • 运行configure的错误信息是“config.status: error: cannot find input file: `apple/john/Makefile.in'
  • 我会推荐使用分布式版本控制系统而不是这个方案。不要与你的工具作斗争。
  • @ptomato,在之前的事件中,分布式版本控制以完全奇怪的分叉结束(团队甚至自己定制了主代码)。跟踪和维护变得困难。这是供内部使用的非官方工具,可供 30 到 40 个团队使用,每个团队都有自己的定制要求。我的目的是提供稳定的核心(我维护)和灵活的行动(为每个团队)的组合。动态路径是现在唯一的阻塞问题。工具不应过于严格。例如,在 makefile 中读取通配符上的参数。自动工具也可以帮助删除我的指针吗?
  • 我有这种感觉是因为,我所要求的并不是什么大事。变量替换在 configure.ac 的其他区域有效,但在 AC_COFIG_FILE 中无效。语法在这方面缺乏一致性。

标签: makefile configure autotools


【解决方案1】:

经过一整天的挠头,以下是我想出的解决方案。

像这样创建一个文件“project_makefiles.m4.in”

AC_CONFIG_FILES([ apple/USERDIR/Makefile ]

将以下内容添加到configure.ac

m4_include([project_makefiles.m4])

创建一个像“build.sh”这样的包装脚本,它将通过替换“USERDIR”从“project_makefiles.m4.in”创建“project_makefiles.m4”。这是在自动制作之前完成的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 2013-08-21
    • 2011-11-08
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 2021-10-29
    相关资源
    最近更新 更多