Аномалия Makefile: Вызывает `make`, и кажется, что он запускает другой make-файл - PullRequest
1 голос
/ 07 марта 2012

У меня есть следующий 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)

Когда я запускаю make на том же уровне, что и Makefile, он вызывает другой make-файл, не связанный с этим.

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

AsВы можете видеть, что я даже не создаю никакой исходный код, только беру объектные файлы, которые уже скомпилированы, и помещаю их в статическую и динамическую библиотеку.Почему он пытается скомпилировать источник?Ниже приведена моя структура каталогов.

[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% уверен, что нахожусь в том же каталоге, что и make-файл.Что дает?

1 Ответ

2 голосов
/ 07 марта 2012

Ваши цели имеют объектные файлы в качестве предварительных условий (какие бы объектные файлы ни находились в этих каталогах в данный момент). Объектные файлы уже существуют, но Make проверит их, чтобы увидеть, устарели ли они и должны ли быть восстановлены. Если он проверяет объектный файл, находит соответствующий исходный файл, который является более новым, пытается перекомпилировать объект и отсутствует файл заголовка, вы получите сообщение об ошибке, подобное тому, что вы видите. В игре нет никаких доказательств другого make-файла.

Есть несколько способов справиться с этим. Самый простой способ - это, вероятно, переместить исходные файлы из каталога, в котором вы запускаете Make (или наоборот).

EDIT:
@eriktous указал лучший способ: используйте make -r, чтобы отключить встроенные правила.

...