C++ 在autotools项目中包括(仅标题)库
我想在我的AutoTooCAD项目中集成一个头文件C++库。由于库使用Autoconf和Automake,因此我在C++ 在autotools项目中包括(仅标题)库,c++,build-process,autotools,autoconf,automake,C++,Build Process,Autotools,Autoconf,Automake,我想在我的AutoTooCAD项目中集成一个头文件C++库。由于库使用Autoconf和Automake,因此我在configure.ac中使用,并将库目录添加到Makefile.am中的SUBDIRS=行中 我的问题是:如何防止头库被makeinstall安装?我正在构建一个二进制文件,所以我的用户不需要这些头文件 我不想篡改库,所以我只需解开新版本就可以升级。那么不要使用子目录。以下黑客可能会起作用: all-local: ${MAKE} -C thatlib all 所有本
configure.ac
中使用,并将库目录添加到Makefile.am
中的SUBDIRS=
行中
我的问题是:如何防止头库被makeinstall
安装?我正在构建一个二进制文件,所以我的用户不需要这些头文件
我不想篡改库,所以我只需解开新版本就可以升级。那么不要使用
子目录。以下黑客可能会起作用:
all-local:
${MAKE} -C thatlib all
所有本地:
${MAKE}-C thatlib all
当然,最好将库保留在项目之外的自己的目录中,您只需通过CFLAGS/LIBS标志指向它。这里有一个想法
将不希望看到安装的所有第三方库移动到名为noinst/
的子目录中。因此,例如,如果您想使用类似Boost的东西发布您的项目,请将其解压缩到目录noinst/Boost/
中。使用AC\u CONFIG\u子菜单([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”、“makeclean”或“makedist”)仍将递归到子目录中
当然,您可以将install:
和friends直接覆盖到第三方软件包中,并避免使用额外的noinst/
目录。但是,如果你像我一样,你不想篡改第三方软件包来简化它们的更新。
上述设置的另一个很好的特性是,如果有人进入noinst/boost/
并决定运行makeinstall
,它就会工作。默认情况下,安装您的软件包时不会出现这种情况。只是遇到了一个类似的问题,并在以下目录中找到了解决方案:
noinst_HEADERS是在只包含头而不包含关联库或程序的目录中使用的正确变量
Andreas我很想把它放在我的树之外,但我正试图减少外部依赖。谢谢,我试试这个。不行。这将在我的程序之后构建库,这显然不起作用。这将导致makeinstall
命令将noinst头与其他所有头一起安装。