Autotools 抱怨使用不同上下文编译的文件
Autotools complain about files compiled with different contexts
我开始收到这些警告(有好几页)。问题是我无法打开 subdir-objects
,因为这些文件是从不同的上下文(针对不同的二进制文件)编译的,因此每个 .c
/[=14= 生成多个 .o
文件] 文件。
src/scheduler.meta/Makefile.am:15: warning: source file 'base/MiscHelpers.cpp' is in a subdirectory,
src/scheduler.meta/Makefile.am:15: but option 'subdir-objects' is disabled
如何摆脱这些警告?
要删除该选项,只需将 subdir-objects
选项添加到 Makefile.am
即可启用 subidr-objects。例如:
AUTOMAKE_OPTIONS = subdir-objects foreign
这将创建二进制对象的文件系统层次结构。
例如您的 Makefile.am 包含:
foo_SOURCES=foo.c bar/bar.c
那么构建过程中生成的对象会像
foo.o bar/bar.o
当不使用subdir-objects
时,您会
foo.o bar.o
多个上下文
如果你想多次构建相同的源文件,你想找到一种方法来确保二进制对象获得唯一的名称。
如果 automake 认为对象是用不同的标志编译的,它会自动执行此操作。
因此,您可以通过为所有上下文提供(虚拟)FLAGS :
来欺骗它 创建独特的后缀
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" 和 "libfoobar" 构建 foo.c
(在根目录中),而不会产生冲突:
$ 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
我开始收到这些警告(有好几页)。问题是我无法打开 subdir-objects
,因为这些文件是从不同的上下文(针对不同的二进制文件)编译的,因此每个 .c
/[=14= 生成多个 .o
文件] 文件。
src/scheduler.meta/Makefile.am:15: warning: source file 'base/MiscHelpers.cpp' is in a subdirectory,
src/scheduler.meta/Makefile.am:15: but option 'subdir-objects' is disabled
如何摆脱这些警告?
要删除该选项,只需将 subdir-objects
选项添加到 Makefile.am
即可启用 subidr-objects。例如:
AUTOMAKE_OPTIONS = subdir-objects foreign
这将创建二进制对象的文件系统层次结构。
例如您的 Makefile.am 包含:
foo_SOURCES=foo.c bar/bar.c
那么构建过程中生成的对象会像
foo.o bar/bar.o
当不使用subdir-objects
时,您会
foo.o bar.o
多个上下文
如果你想多次构建相同的源文件,你想找到一种方法来确保二进制对象获得唯一的名称。 如果 automake 认为对象是用不同的标志编译的,它会自动执行此操作。 因此,您可以通过为所有上下文提供(虚拟)FLAGS :
来欺骗它 创建独特的后缀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" 和 "libfoobar" 构建 foo.c
(在根目录中),而不会产生冲突:
$ 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