有没有办法避免使用nobase进行递归制作?

时间:2016-06-11 08:28:14

标签: recursion makefile header autotools automake

我有以下目录结构:

Makefile.am
src/
    mymod/
        mod.cc
        submod/
            submod.cc
inc/
    Makefile.am
    mymod/
        mod.hh
        submod/
            submod.hh

使用自动工具,我想分发由src制作的库和inc中的标题。顶级Makefile.am看起来像

lib_LTLIBRARIES = mylib.la
mylib_la_SOURCES=./mymod/mod.cc\
                 ./mymod/submod/submod.cc
SUBDIRS=inc

然后inc/Makefile.am

mymod_includedir=$(includedir)
nobase_mymod_include_HEADERS=mymod/mod.hh\
                             mymod/submod/submod.hh

这很好用。我最终得到了什么库的东西,我的标题得到了适当的安装。但是,我想消除Makefile中涉及的递归。问题是,如果我将inc/Makefile.am中的行移动到根目录,那么我必须按如下方式更新路径:

mymod_includedir=$(includedir)
nobase_mymod_include_HEADERS=inc/mymod/mod.hh\
                             inc/mymod/submod/submod.hh

这会导致我的标题被转储为$PREFIX/include/inc/mymod/mod.hh而不是我想要的$PREFIX/include/mymod/mod.hh。我知道我 可以做类似

的事情
mymodincludedir=$(includedir)/mymod
mymod_HEADERS=inc/mymod/mod.hh

mysubmodincludedir=$(includedir)/mymod/submod
mysubmod_HEADERS=inc/mymod/submod/submod.hh

但这非常痛苦,因为子目录中有很多,子目录中有更多子目录(我们正在分发第三方的代码我们自己的标题需要)。我希望能够做到的是告诉automake只将/inc中的目录与它遇到的每个子目录一起复制到$(includepath),或者告诉automake只删除部分内容我列出的头文件中的路径。这可能吗?

1 个答案:

答案 0 :(得分:0)

我认为你能找到的最接近的是Karel Zak的Makemodule.am approach nobase_可以根据需要使用。