我有以下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位于同一目录中。是什么给了什么?
答案 0 :(得分:2)
您的目标将目标文件作为先决条件(当时目标文件恰好位于这些目录中)。目标文件已经存在,但Make将检查它们以查看它们是否已过期并应重建。如果它检查一个目标文件,找到一个更新的相应源文件,尝试重新编译该对象,并且缺少一个头文件,你会收到一条错误消息,就像你看到的那样。没有证据表明还有另一个makefile。
有几种方法可以解决它。 最简单的方法可能是将源文件从运行Make的目录移开(反之亦然)。
修改:
@eriktous指出了一种更好的方法:使用make -r
禁用内置规则。