gpt4 book ai didi

c++ - Autotools 提示使用不同上下文编译的文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:31 24 4
gpt4 key购买 nike

我开始收到这些警告(其中有好几页)。问题是我无法打开 subdir-objects,因为这些文件是从不同的上下文(针对不同的二进制文件)编译的,因此每个 .o 生成多个文件 .c/.cpp 文件。

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

关于c++ - Autotools 提示使用不同上下文编译的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31319062/

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