使用 automake 将头文件放在 /usr/include 的子目录中?
Posted
技术标签:
【中文标题】使用 automake 将头文件放在 /usr/include 的子目录中?【英文标题】:Placing header files in a subdirectory of /usr/include with automake? 【发布时间】:2011-04-09 08:45:01 【问题描述】:如果我编写了一个库,并且包含了用于开发的头文件,并且有这样的src/Makefile.am
:
AM_CFLAGS = -std=c99 -Wall -Werror -Os
lib_LTLIBRARIES = libmylibrary.la
libmylibrary_la_SOURCES = a.c b.c
include_HEADERS = a.h b.h
一切都很好。但是,a.h
和b.h
直接安装在/usr/include
(或/usr/local/include
)下。我应该怎么做才能将它们安装在我的库特定的子目录中,例如/usr/include/mylibrary
?
【问题讨论】:
【参考方案1】:除了您提到的pkginclude_HEADERS
,您还可以将头文件安装到/usr/include
的任意子目录中,使用您喜欢的任何名称,如下所示:
otherincludedir = $(includedir)/arbitrary_name
otherinclude_HEADERS = a.h b.h
使用 pkginclude_HEADERS = publicHeader.h 的好处是,在大型系统中,每个包都保留在其自己的 $prefix/include 子目录中,并且避免了覆盖来自不同包的同名包头的机会。此外,这种命名约定有助于用户轻松找到特定包的标头。
【讨论】:
我不断收到 Makefile.am:9: error: 'otherinclude_HEADERS' is used but 'otherincludedir' is undefined (想通了,我需要使用指定为子目录的名称,在这种情况下'包括'而不是'其他包括') (不,那没用,它一直在 include/PropID.h 而不是 includes/7zip/PropID.h) (derp,我有阅读障碍,otherincludedir 不只是 otherinclude)【参考方案2】:看来我问 Stack Overflow 的速度太快了 ;)
经过一番搜索,我发现如果我使用pkginclude_HEADERS
而不是include_HEADERS
,则标题会进入/usr/include/[package name]
。
http://realmike.org/blog/2010/07/18/gnu-automake-by-example/
【讨论】:
你有没有设法避免将标题放入[package name]
subdir?我的意思是:可以将所有标头直接安装到/usr/include/
?
@LPs 不太明白你在问什么。正如Delan之前所说,他使用include_HEADERS
,文件直接安装在/usr/include
下以上是关于使用 automake 将头文件放在 /usr/include 的子目录中?的主要内容,如果未能解决你的问题,请参考以下文章