在autotools项目中包含一个(仅头文件)库

3
我想在我的Autotools项目中集成一个仅有头文件的C++库。由于该库使用Autoconf和Automake,因此我在configure.ac中使用AC_CONFIG_SUBDIRS,并将库目录添加到Makefile.am中的SUBDIRS =行中。
我的问题是:如何防止头文件库被make install安装?我正在构建单个二进制文件,所以我的用户不需要这些头文件。
我更希望不要篡改库,这样我就可以通过解压新版本来升级。
3个回答

2
这里有一个想法。
将所有不想看到安装的第三方库移动到名为“noinst/”的子目录中。例如,如果您想将类似于Boost这样的项目与您的项目一起发布,请将其解压缩到目录“noinst/boost/”中。使用“AC_CONFIG_SUBDIRS([noinst/boost])”。在“noinst/Makefile.am”内,可以像这样进行操作:
SUBDIRS = boost
# Override Automake's installation targets with the command ":" that does nothing.
install:; @:
install-exec:; @:
install-data:; @:
uninstall:; @:

效果是当从顶层目录运行一些递归的"make install*"或"make uninstall"命令时,递归将停止在noinst/而不会访问其子目录。其他递归命令(如"make"、"make clean"或"make dist")仍将递归到子目录中。您当然可以直接覆盖install:和其他内容到第三方包中,避免额外的noinst/目录。但如果您像我一样,不想修改第三方软件包来简化它们的更新,那么上述设置的一个好处是如果有人进入noinst/boost/并决定运行make install,它将正常工作。它只是不会默认安装您的软件包。

1

我遇到了类似的问题,并在automake手册中找到了解决方案:

noinst_HEADERS是在只包含头文件而没有相关库或程序的目录中使用的正确变量

安德烈亚斯


这将导致make install命令在安装其他所有内容的同时,安装noinst头文件。 - jonthalpy

0

不要使用SUBDIRS。以下的hack可能有效:

all-local:
        ${MAKE} -C thatlib all

当然,最好的方法是将库保留在项目外的其自己的目录中,并通过CFLAGS/LIBS标志指向它。


1
我很想把它放在我的树外面,但我正在努力减少外部依赖。谢谢,我会尝试这个的。 - Fred Foo
无法工作。这会在我的程序之后构建库,显然不会起作用。 - Fred Foo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接