我正在用 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”这一事实。
请建议如何克服这个问题。在最坏的情况下,我最终可能会创建软链接:(