makefile - C类 - 如何编译和安装带有Automake的单个对象文件?

我正在想办法把对象文件(crt1.o,一个C启动文件)单独构建,并且安装到带有Automake和Autoconf的库目录(/usr/lib )中。

因此,我最初的工作是在Makefile.am文件中创建一个crt_DATA变量,并定义如何构建文件的特殊目标,但是,这个想法有一个问题: 该文件将安装在数据目录而不是库目录中。

然后我尝试在Makefile.amlib_LIBRARIES部分中添加crt1.o,并且创建crt1_o_SOURCES ,但是,这给出了一个错误:


error: 'crt1.o' is not a standard library name



如何使用Automake编译和安装单个对象文件?

非常特殊的要求:

  • 不能将crt1.o内置到它自己的共享库或存档中,它必须是一个目标文件,

  • 如果DESTDIR改变了,这个文件就可以被跟踪,并且安装到正确的地方。

时间:

你可能想要一个"共享对象"文件或.so文件,如果你想构建一个库,或者,如果你想要静态链接库,可能需要一个"库文件"或.la文件。

假设上面的信息不是你需要的,而且你真的想安装.o文件,那么你应该将以下内容添加到Makefile.am 。


somethingdir = /path/to/where/you/want/the/file


something_DATA = the_file.o



将对象文件视为数据文件,并在所选路径处安装数据文件。

你可能需要的是:

  • 将对象文件构建到可执行文件中,并安装该可执行文件,
  • 将对象文件构建到共享对象库中,并安装该库,
  • 将对象文件构建到库归档(那是.la文件)中,并安装库档案,

作为纯对象文件,.o文件不能很容易地使用,不需要用于构建它们的头文件。

我最后做的是


crtdir = $(libdir)


crt_DATA = crt1.o Scrt1.o crti.o crtn.o



crt1.o: $(top_srcdir)/src/crt/crt1.c


 $(CC) -c -fno-PIC $(AM_CPPFLAGS) $(CFLAGS) -o $@ $^



Scrt1.o: $(top_srcdir)/src/crt/crt1.c


 $(CC) -c -fPIC $(AM_CPPFLAGS) $(CFLAGS) -o $@ $^



crti.o: $(top_srcdir)/arch/$(ARCH)/src/crt/crti.s


 $(CCAS) -c $(CFLAGS) -o $@ $^



crtn.o: $(top_srcdir)/arch/$(ARCH)/src/crt/crtn.s


 $(CCAS) -c $(CFLAGS) -o $@ $^



...