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

标签 c autotools automake

我有一个 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/

相关文章:

c - 生成概率均匀(或更小)的随机立方图

c - C 中的 "sh: fork: retry: no child processes"问题

自动工具临时文件

autotools - 文件由 `make dist` 复制,但未由 `make distcheck` 复制

c++ - 将目录附加到 pkginclude_header

java - CallObjectMethod/CallObjectMethodV : Ineligible receiver 中的 JNI 错误

c++ - 获取正在运行的进程的堆栈回溯

linux - Linux 程序中的路径管理

sed - 在 Makefile.am 中调用 SED 获取源代码

linux - 如何将自动制作文件写入递归构建子目录?