0

我正在用 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”这一事实。

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

4

1 回答 1

0

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

像这样创建一个文件“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”。这是在自动制作之前完成的。

于 2013-10-26T04:51:58.073 回答