Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在autotools项目中包括(仅标题)库_C++_Build Process_Autotools_Autoconf_Automake - Fatal编程技术网

C++ 在autotools项目中包括(仅标题)库

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 所有本

我想在我的AutoTooCAD项目中集成一个头文件C++库。由于库使用Autoconf和Automake,因此我在
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头与其他所有头一起安装。