我正在用c ++编写一个小工具。它实际上更像是一个可以自定义的框架。它具有以下目录结构(简化示例)。
src/
main/myexec # linked to libapple.so
apple/
coder/libapple.so
john/libapple.so
.
.
james/libapple.so
这里,目录“coder”是一个通用的虚拟对象,带有一些生成libapple.so的示例代码。不同的用户可以签出此工具,创建自己的目录,从“编码器”复制模板代码并根据需要进行自定义。根据configure选项(指示用户),需要生成相应的libapple.so。
正如我所提到的,这是一个简化的例子。这不是通用编程,继承等问题。实际上,类似于“apple”文件夹,还有其他类似“脚本”,“文档”,“配置”等,每个文件夹都具有类似的用户特定文件夹。此外,该工具将保留在一个存储库位置,以便我支持&维护所有非特定于用户的代码。作为一项政策,用户只需修改和签入其文件夹的内容。
我面临的问题是“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”这一事实外,一切看起来都不错。
请建议如何克服这个问题。在最糟糕的情况下,我最终可能会创建软链接:(
答案 0 :(得分: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”。这是在automake之前完成的。