如何使用自动工具安装仅标头的C ++库?

问题描述 投票:0回答:1

我正在使用的库是仅标头的库。它具有以下结构:

+-- Makefile.am
+-- include
|   +-- header1.h
|   +-- header2.h
+-- tests
|   +-- test1.c
|   +-- test2.c
|   +-- Makefile.am

tests/Makefile.am中,bin_PROGRAMS = test1 test2

[当我执行./configure && make && make install时,仅将测试可执行文件安装在${PREFIX}/bin中。我有两个问题:

  1. 如何在make install${PREFIX}/include期间安装两个接头连接器?
  2. 如何避免在make install期间安装可执行文件,但仍然能够在make期间进行编译?

非常感谢。

autotools automake
1个回答
1
投票
  1. 如何在进行安装期间将两个标头安装到$ {PREFIX} / include?

您要安装的每个文件都必须命名为Automake,否则由自定义目标处理。 C和C ++头文件的主要文件是HEADERSincludedir是标准目录变量之一。然后,安装标题的一种方法是将其添加到顶层Makefile.am

include_HEADERS = include/header1.h include/header2.h

[请注意,每个文件名中的include/是源目录中该标头的路径,相对于其中出现的Makefile.am。在该声明中没有其他意义。特别是,安装的文件将是$(includedir)/header1.h$(includedir)/header2.h,而不是$(includedir)/include/...。即,Automake将目标文件名基于相应目录变量的值和指定路径的basename,从而获得所需的结果。 (用nobase_前缀变量名将使Automake保留相对路径部分。)

还请注意,$(includedir)的值默认情况下为$(prefix)/include,但是您可以使用configure的适当参数覆盖它。

  1. 如何避免在make install期间安装可执行文件,但仍然能够在make期间编译它们?

宣言

bin_PROGRAMS = test1 test2

不仅说test1test2是要构建的可执行文件,而且[[也要由$(bindir)将它们安装在make install中。相反,如果您希望它们默认情况下由make构建但从未安装,则请使用特殊前缀noinst_,此前缀完全可以满足此目的:

noinst_PROGRAMS = test1 test2
或者,如果您正在使用Automake的内置支持来构建和运行测试套件,而这些二进制文件实际上是为此目的而设计的,那么您应该考虑使用check_前缀:

check_PROGRAMS = test1 test2

这将使这些程序由make check构建(在需要时),但默认情况下不是,并且从不安装。在适用的情况下,这可以弄清意图,也许可以为您节省一些构建时间。

有关这些问题的更全面的解释,您应该查阅AutoMake手册,尤其是其中有关“ uniform naming scheme”的部分。

© www.soinside.com 2019 - 2024. All rights reserved.