gpt4 book ai didi

c - GNU AutoMake 中的显式中间对象文件

转载 作者:行者123 更新时间:2023-12-03 03:41:23 31 4
gpt4 key购买 nike

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

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

编辑:感谢 ptomato 解决了。

由于 Automake 的依赖性解析,所有可能的源都必须在 *_SOURCESEXTRA_*_SOURCES 中命名,如 the Conditional Sources section of the manual 中所述。 。因此,库节实际上是:

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@

最佳答案

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

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

其中具有固定名称的中间目标文件是 libdriver.a,您的应用程序是 myprogram

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

关于c - GNU AutoMake 中的显式中间对象文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3122510/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com