2013-10-25 50 views
0

我正在用C++编写一个小工具。它实际上更多是一个可定制的框架。它具有以下目录结构(简化示例)。configure.ac中AC_CONFIG_FILES的可变目录路径

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

在这里,目录“编码器”是一个通用的哑元,并带有一些示例代码来生成libapple.so。不同的用户可以检出这个工具,创建他们自己的目录,从“编码器”复制模板代码并按照他们的意愿自定义。根据配置选项(表示用户),需要生成相应的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

关于运行configure的错误信息是“config.status:error:找不到输入文件:'apple/john/Makefile.in' – mpathi

+0

我建议使用分布式版本控制系统来代替这个方案。你的工具 – ptomato

+0

@ptomato,在之前的一个事件中,分布式版本控制以完全陌生的分支结束(团队自定义主代码),跟踪和维护变得困难,这是一个非官方的内部使用工具,到40个团队,每个团队都有自己的定制要求,我的目标是提供稳定的核心(我维护)和灵活的操作(针对每个团队)的组合。例如,读取makefile中通配符的参数。自动工具是否可以帮助删除我的指针? – mpathi

回答

0

结束后抓我的头,下面的一整天的是,我想出了解决方案。

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

AC_CONFIG_FILES([ apple/USERDIR/Makefile ] 

添加下面的configure.ac

m4_include([project_makefiles.m4]) 

创建像一个包装脚本 ”build.sh“,这将创造 ”project_makefiles.m4“ 从” project_makef iles.m4.in“替换”USERDIR“。这是在automake之前完成的。