我想在我的Autotools项目中集成一个只有头文件的C ++库。由于该库使用Autoconf和Automake,我在configure.ac
中使用AC_CONFIG_SUBDIRS
并将库目录添加到SUBDIRS =
中的Makefile.am
行。
我的问题是:如何阻止make install
安装标头库?我正在构建一个二进制文件,因此我的用户不需要这些标头。
我不想篡改库,所以我可以通过解开新版本来获取升级。
答案 0 :(得分: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 :(得分:1)
答案 2 :(得分:0)
然后不要使用SUBDIRS
。以下黑客可能有效:
all-local: ${MAKE} -C thatlib all
当然,如果库保留在项目之外的自己的目录中,那么最好通过CFLAGS / LIBS标志指向它。