首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用(nobase_)pkginclude_HEADERS在子目录中安装标头

使用(nobase_)pkginclude_HEADERS在子目录中安装标头
EN

Stack Overflow用户
提问于 2014-03-20 12:46:23
回答 1查看 809关注 0票数 0

在安装报头时,我在自动处理子目录方面有一个小问题。

下面是我所拥有的项目层次结构:

代码语言:javascript
运行
复制
foo/
  foo-bin/
    Makefile.am
    ...
  foo-tests/
    Makefile.am
    ...
  foo-lib/
    Makefile.am
    include/
      foo/
        header1.h
        subdir/
          header2.h
    src/
      file1.cpp

没有什么特别之处,这里有一个包含configure.ac的根目录,以及共享库、主二进制文件和测试的3个子目录。

这里有趣的部分是foo-lib/。它包含二进制和测试链接到的库。

由于我希望能够在源树之外生成配置文件,所以我决定在我的$top_srcdir-relative路径中使用Makefile.am

如下所示:

代码语言:javascript
运行
复制
libfoo_la_SOURCES = \
  $(top_srcdir)/foo-lib/src/file1.cpp

pkginclude_HEADERS = \
  $(top_srcdir)/foo-lib/include/foo/header1.h \
  $(top_srcdir)/foo-lib/include/foo/subdir/header2.h

如果没有这些$top_srcdir-relative路径,当我尝试使用来自foo-binfoo-lib时,或者当我试图从源树生成项目时,我会遇到问题。

现在的问题是:当安装这些标题时,它们最终会被夷为平地!也就是说,我的结局是:

代码语言:javascript
运行
复制
$prefix/include/foo/header1.h
$prefix/include/foo/header2.h

当我期待:

代码语言:javascript
运行
复制
$prefix/include/foo/header1.h
$prefix/include/foo/subdir/header2.h

因此,我假设这就是nobase_应该实现的目标,但是由于我使用的路径不是相对于Makefile.am,而是相对于$top_srcdir,所以我最终复制了整个$top_srcdir路径:

代码语言:javascript
运行
复制
$prefix/include/foo-lib/include/foo/header1.h
$prefix/include/foo-lib/include/foo/subdir/header2.h

这显然不是人们所期望的。

如果您需要访问实际的Makefile.am文件,而不是常规示例,则项目如下:

https://github.com/NewbiZ/crashburn

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-20 18:55:55

这是:

代码语言:javascript
运行
复制
pkginclude_HEADERS = \
$(top_srcdir)/foo-lib/include/foo/header1.h \
$(top_srcdir)/foo-lib/include/foo/subdir/header2.h

告诉安装程序将头放在$(pkgincludedir)中,所以您告诉它们应该是扁平的。

你能做的就是:

代码语言:javascript
运行
复制
myincludesubdir=$(pkgincludedir)/subdir

pkginclude_HEADERS = $(top_srcdir)/foo-lib/include/foo/header1.h
myincludesub_HEADERS = $(top_srcdir)/foo-lib/include/foo/subdir/header2.h

这应该将header1.h安装到$(pkgincludedir),将header2.h安装到$(myincludesubdir) aka $(pkgincludedir)/subdir

在这种情况下,我不会使用nobase_。你使用它的结果在我看来并不意外或错误。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22533504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档