Makefile Anomaly:调用`make`,它似乎正在运行另一个makefile

时间:2012-03-06 23:54:31

标签: linux makefile gnu

我有以下Makefile:

OBJDIRS       = Runtime/Core/Common Runtime/Core/Graphic/SymbolXLib Runtime/Core/Map Runtime/Core/SymbolDictionary \
                Runtime/CoreClient/RuntimeCoreJava
OBJS          = $(wildcard $(OBJDIRS:=/*.o))
TARGETA       = libRuntimeCoreJava.a
TARGETD       = libRuntimeCoreJava.so
TARGETD1      = $(TARGETD).1
TARGETD2      = $(TARGETD).1.0
TARGETD3      = $(TARGETD).1.0.0
AR            = ar cqs
LINK          = g++
SYMLINK       = ln -f -s
LDFLAGS = -shared -Wl,-soname,libRuntimeCoreJava.so.1

all : $(TARGETD) $(TARGETA)

$(TARGETD) : $(OBJS)
        echo "Building Dynamic Lib using "$(OBJS)
        #$(CXX) $(LDFLAGS) $(OBJS)
        #$(SYMLINK) $(TARGETD) $(TARGETD1)
        #$(SYMLINK) $(TARGETD) $(TARGETD2)
        #$(SYMLINK) $(TARGETD) $(TARGETD3)

$(TARGETA) : $(OBJS)
        echo "Building Static Lib using "$(OBJS)
        #$(AR) $(TARGETA) $(OBJS)

当我在与Makefile相同的级别运行make时,它似乎调用另一个与此无关的makefile。

In file included from Runtime/Core/Common/JNICallback.cpp:16:
Runtime/Core/Common/stdafx.h:33:17: error: log.h: No such file or directory
Runtime/Core/Common/stdafx.h:34:23: error: Namespace.h: No such file or directory
Runtime/Core/Common/JNICallback.cpp:18:25: error: JNICallback.h: No such file or directory
make: *** [Runtime/Core/Common/JNICallback.o] Error 1

正如您所看到的,我甚至没有构建任何源代码,只获取已经编译的对象文件并将它们放入静态和动态库中。为什么要尝试编译源代码?以下是我的目录结构。

[matt6809@hogganz400 src]$ ls -l
drwxrwxr-x  2 matt6809 matt6809  4096 Mar  2 11:47 binDebug
drwxrwxr-x  2 matt6809 matt6809  4096 Feb 15 13:31 binRelease
drwxrwxr-x  2 matt6809 matt6809  4096 Feb 22 11:03 include
drwxrwxr-x  2 matt6809 matt6809  4096 Mar  5 10:55 libDebug
drwxrwxr-x  2 matt6809 matt6809  4096 Feb 15 11:25 libRelease
-rw-rw-r--  1 matt6809 matt6809   824 Mar  6 15:48 Makefile
drwxrwxr-x  5 matt6809 matt6809  4096 Feb 14 16:03 Runtime
drwxrwxr-x  6 matt6809 matt6809  4096 Feb 14 16:43 System

我100%确定我与makefile位于同一目录中。是什么给了什么?

1 个答案:

答案 0 :(得分:2)

您的目标将目标文件作为先决条件(当时目标文件恰好位于这些目录中)。目标文件已经存在,但Make将检查它们以查看它们是否已过期并应重建。如果它检查一个目标文件,找到一个更新的相应源文件,尝试重新编译该对象,并且缺少一个头文件,你会收到一条错误消息,就像你看到的那样。没有证据表明还有另一个makefile。

有几种方法可以解决它。 最简单的方法可能是将源文件从运行Make的目录移开(反之亦然)。

修改:
@eriktous指出了一种更好的方法:使用make -r禁用内置规则。