C GNU AutoMake中的显式中间对象文件

C GNU AutoMake中的显式中间对象文件,c,autotools,automake,C,Autotools,Automake,我有一个C应用程序,我正在将一组手工编码的makefile转换为GNU AutoMake。它有一个子目录,其中包含一个接口头和几个依赖于平台的实现。当前,已选择一个实现并将其构建到该目录中具有固定名称的对象文件中。使用驱动程序接口的代码然后链接到该对象文件并自动获得正确的驱动程序 将此系统转换为使用自动工具的最佳方式是什么?我已经让AutoConf为正确的驱动程序实现文件创建了一个替换。我只是不知道如何获得一个汽车制造目标,它的额外的

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

将此系统转换为使用自动工具的最佳方式是什么?我已经让AutoConf为正确的驱动程序实现文件创建了一个替换。我只是不知道如何获得一个汽车制造目标,它的
额外的
*\u LDADD
变量我可以将实现文件放入其中。我是否只需要放弃中间对象文件并将它们放在使用它们的程序目标的列表中

编辑:多亏了托马托,才得以解决

由于Automake的依赖解析,所有可能的源必须在
*\u源
额外源
中命名,如中所述。因此,图书馆节实际上是:

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@

您可以构建一个方便的库,并将其静态链接到您的应用程序。最终,它与对象文件之间的差别很小。请参阅《汽车制造手册》的第页。基本上是这样的:

noinst_LIBRARIES = libdriver.a
libdriver_a_SOURCES = @CORRECT_IMPLEMENTATION_FILE@
myprogram_LDADD = libdriver.a
其中,具有固定名称的中间对象文件是
libdriver.a
,应用程序是
myprogram


然而,这对我来说似乎是不必要的复杂。我看不出有任何理由不应该像你建议的那样,放弃中间对象文件,将实现文件放在使用它们的程序目标中。

我相信它最初是以这种方式实现的,以便控制驱动程序构建的Makefile可以与驱动程序代码位于同一目录中。我不确定我是否同意这种理念,但这不是我的项目,所以我会坚持下去。