17

If I write a library, and have header files for development included, and have a src/Makefile.am like this:

AM_CFLAGS = -std=c99 -Wall -Werror -Os
lib_LTLIBRARIES = libmylibrary.la
libmylibrary_la_SOURCES = a.c b.c
include_HEADERS = a.h b.h

Everything works nicely. However, a.h and b.h are installed directly under /usr/include (or /usr/local/include). What should I do to get them installed, in a subdirectory specific to my library, e.g. /usr/include/mylibrary?

Vadim Kotov
  • 8,084
  • 8
  • 48
  • 62
Delan Azabani
  • 79,602
  • 28
  • 170
  • 210

2 Answers2

25

As well as pkginclude_HEADERS, which you mention, you can also install header files into an arbitrary subdirectory of /usr/include with any name you like, like this:

otherincludedir = $(includedir)/arbitrary_name
otherinclude_HEADERS = a.h b.h

The advantage of using pkginclude_HEADERS = publicHeader.h is that in a large system, each package stay in its own subdirectory of $prefix/include and avoids the chance of overwriting headers from different package with the same name. Furthermore, this naming convention helps users easily locate the header for a particular package.

Kemin Zhou
  • 6,264
  • 2
  • 48
  • 56
ptomato
  • 56,175
  • 13
  • 112
  • 165
9

Looks like I asked Stack Overflow too quickly ;)
With a little more searching, I found that if I use pkginclude_HEADERS instead of include_HEADERS, the headers go in /usr/include/[package name].

http://realmike.org/blog/2010/07/18/gnu-automake-by-example/

Delan Azabani
  • 79,602
  • 28
  • 170
  • 210
  • Have you ever managed to avoid placing header into `[package name]`subdir? I mean: could be all headers installed directly into `/usr/include/`? – LPs Apr 21 '16 at 13:46
  • @LPs Did not quite understand what you are asking about. As Delan said earlier, he used `include_HEADERS` and files were installed directly under `/usr/include` – Vadim Kotov Oct 20 '17 at 16:12