【问题标题】:Is there a way to avoid recursive make with nobase?有没有办法避免使用 nobase 进行递归制作?
【发布时间】:2016-06-11 08:28:14
【问题描述】:

我有以下目录结构:

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

但这很痛苦,因为有很多子目录,子目录中还有更多子目录(我们正在分发我们自己的标头需要的第 3 方代码)。我想要做的是要么告诉 automake 只将 /inc 中的目录复制到 $(includepath) 以及它遇到的每个子目录,要么告诉它只从头文件中删除部分路径正在上市。这可能吗?

【问题讨论】:

    标签: recursion makefile header autotools automake


    【解决方案1】:

    我认为您能找到的最接近的是 Karel Zak 的 Makemodule.am approachnobase_ 可以满足您的需要。

    【讨论】:

    • 您能详细说明一下吗? Makemodule.am 方法已经是我正在使用的方法。我怎样才能以这种方式使用 nobase_ ?据我了解,我仍然必须指定完整路径,所以我仍然遇到我的问题中提到的相同问题。
    猜你喜欢
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多