我正在使用的库是仅标头的库。它具有以下结构:
+-- 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
中。我有两个问题:
make install
至${PREFIX}/include
期间安装两个接头连接器?make install
期间安装可执行文件,但仍然能够在make
期间进行编译?非常感谢。
- 如何在进行安装期间将两个标头安装到$ {PREFIX} / include?
您要安装的每个文件都必须命名为Automake,否则由自定义目标处理。 C和C ++头文件的主要文件是HEADERS
,includedir
是标准目录变量之一。然后,安装标题的一种方法是将其添加到顶层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
的适当参数覆盖它。
- 如何避免在make install期间安装可执行文件,但仍然能够在make期间编译它们?
宣言
bin_PROGRAMS = test1 test2
不仅说test1
和test2
是要构建的可执行文件,而且[[也要由$(bindir)
将它们安装在make install
中。相反,如果您希望它们默认情况下由make
构建但从未安装,则请使用特殊前缀noinst_
,此前缀完全可以满足此目的:
noinst_PROGRAMS = test1 test2
或者,如果您正在使用Automake的内置支持来构建和运行测试套件,而这些二进制文件实际上是为此目的而设计的,那么您应该考虑使用check_
前缀:
check_PROGRAMS = test1 test2
这将使这些程序由make check
构建(在需要时),但默认情况下不是,并且从不安装。在适用的情况下,这可以弄清意图,也许可以为您节省一些构建时间。有关这些问题的更全面的解释,您应该查阅AutoMake手册,尤其是其中有关“ uniform naming scheme”的部分。