使用 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.hb.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 的子目录中?的主要内容,如果未能解决你的问题,请参考以下文章

将头文件编译成DLL

将头文件中的 typedef 枚举包含在另一个头文件中

使用 automake 设置每个文件的标志

Automake:设置数据文件权限模式

使用 autoconf/automake,如何指定包含文件路径?

Xcode 4:为啥我不能将头文件添加到单元测试目标?