3

我有一个 C 应用程序,我正在将一组手工编码的 Makefile 转换为 GNU AutoMake。它有一个子目录,其中包含一个接口头和几个平台相关的实现。当前,选择一个实现并将其构建到该目录中具有固定名称的目标文件。然后使用驱动程序接口的代码链接到该目标文件并自动获取正确的驱动程序。

将此系统转换为使用 AutoTools 的最佳方法是什么?我已经让 AutoConf 为正确的驱动程序实现文件创建了一个替换。我只是不知道如何获得一个 AutoMake 目标,我可以将实现文件放入其EXTRA_*_SOURCES*_LDADD变量中。我是否只需要放弃中间目标文件并将它们放入使用它们的程序目标的列表中?

编辑:感谢 ptomato 解决。

由于 Automake 的依赖解析,所有可能的源都必须在*_SOURCES和中命名EXTRA_*_SOURCES,如手册的条件源部分所述。因此,图书馆节实际上是:

noinst_LIBRARIES = libdriver.a
libdriver_a_SOURCES = driver.h
EXTRA_libdriver_a_SOURCES = driver-linux.c driver-windows.c driver-osx.c
libdriver_a_LIBADD = @DRIVERIMPL@
4

1 回答 1

2

您可以构建一个便利库,并将其静态链接到您的应用程序。最终,它与目标文件之间几乎没有区别。请参阅Automake 手册的这一页。基本上它是这样的:

noinst_LIBRARIES = libdriver.a
libdriver_a_SOURCES = @CORRECT_IMPLEMENTATION_FILE@
myprogram_LDADD = libdriver.a

具有固定名称的中间目标文件在哪里libdriver.a,而您的应用程序在哪里myprogram

但是,这对我来说似乎不必要地复杂。我看不出有什么理由不应该按照您的建议放弃中间目标文件并将实现文件放在使用它们的程序目标中。

于 2010-06-29T19:27:59.613 回答