我开始收到这些警告(其中几页)。问题是我无法启用subdir-objects
因为这些文件是从不同的上下文(针对不同的二进制文件)编译的,因此每个.o
/ {{1}生成了多个.c
个文件文件。
.cpp
如何摆脱这些警告?
答案 0 :(得分:1)
要删除该选项,只需在subdir-objects
中添加Makefile.am
选项,即可启用 subidr-objects 。 e.g:
AUTOMAKE_OPTIONS = subdir-objects foreign
这将创建二进制对象的文件系统层次结构。
e.g。你的Makefile.am包含:
foo_SOURCES=foo.c bar/bar.c
然后构建期间生成的对象就像
foo.o bar/bar.o
当不使用subdir-objects
时,您将改为
foo.o bar.o
如果要多次构建相同的源文件,您希望找到一种方法来确保二进制对象获得唯一的名称。 如果认为对象是使用不同的标志编译的话,automake会自动执行此操作。 因此,您可以通过为所有上下文提供(虚拟)FLAG来欺骗它创建唯一的后缀:
AUTOMAKE_OPTIONS = subdir-objects
bin_PROGRAMS=foo
foo_SOURCES=main.c foo.c bar/foo.c
# we need to override the *_CPPFLAGS (using the defaults) to get unique names
foo_CPPFLAGS=$(AM_CPPFLAGS)
lib_LTLIBRARIES=libfoobar.la
libfoobar_la_SOURCES=lib.c foo.c bar/foo.c
# alternatively we can override *_CFLAGS
libfoobar_la_CFLAGS=$(AM_CFLAGS)
这将为" foo"构建foo.c
(在根目录中)和" libfoobar",没有产生冲突:
$ ls -1 *.o */*.o
bar/foo-foo.o
bar/libfoobar_la-foo.o
foo-foo.o
foo-main.o
libfoobar_la-foo.o
libfoobar_la-lib.o