在安装报头时,我在自动处理子目录方面有一个小问题。
下面是我所拥有的项目层次结构:
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
。
如下所示:
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-bin
的foo-lib
时,或者当我试图从源树生成项目时,我会遇到问题。
现在的问题是:当安装这些标题时,它们最终会被夷为平地!也就是说,我的结局是:
$prefix/include/foo/header1.h
$prefix/include/foo/header2.h
当我期待:
$prefix/include/foo/header1.h
$prefix/include/foo/subdir/header2.h
因此,我假设这就是nobase_
应该实现的目标,但是由于我使用的路径不是相对于Makefile.am
,而是相对于$top_srcdir
,所以我最终复制了整个$top_srcdir
路径:
$prefix/include/foo-lib/include/foo/header1.h
$prefix/include/foo-lib/include/foo/subdir/header2.h
这显然不是人们所期望的。
如果您需要访问实际的Makefile.am
文件,而不是常规示例,则项目如下:
发布于 2014-03-20 18:55:55
这是:
pkginclude_HEADERS = \
$(top_srcdir)/foo-lib/include/foo/header1.h \
$(top_srcdir)/foo-lib/include/foo/subdir/header2.h
告诉安装程序将头放在$(pkgincludedir)
中,所以您告诉它们应该是扁平的。
你能做的就是:
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_
。你使用它的结果在我看来并不意外或错误。
https://stackoverflow.com/questions/22533504
复制相似问题