2013-08-25 5 views
0

В настоящее время я пытаюсь скомпилировать интерпретатор языка Джулии на Snow Leopard - это дало мне чертовски время, но я думаю, что у меня его почти нет.Makefile, по-видимому, игнорируя% .o wildcard

Последнее препятствие было следующее сообщение об ошибке:

make: *** No rule to make target `jltypes.o', needed by `/Users/arman/julia/usr/lib/libjulia-release.dylib'. Stop. 

Соответствующие части Makefile, как представляется, следующие:

SRCS = \ 
jltypes gf ast builtins module codegen interpreter \ 
alloc dlload sys init task array dump toplevel jl_uv jlapi profile 
... 
OBJS = $(SRCS:%=%.o) 
... 
%.o: %.c $(HEADERS) 
    @$(PRINT_CC) $(CC) $(CPPFLAGS) $(CFLAGS) $(SHIPFLAGS) -DNDEBUG -c $< -o [email protected] 
%.do: %.c $(HEADERS) 
    @$(PRINT_CC) $(CC) $(CPPFLAGS) $(CFLAGS) $(DEBUGFLAGS) -c $< -o [email protected] 
%.o: %.cpp $(HEADERS) 
    @$(PRINT_CC) $(CXX) $(call exec,$(LLVM_CONFIG) --cxxflags) $(CPPFLAGS) $(CXXFLAGS) $(SHIPFLAGS) -c $< -o [email protected] 
%.do: %.cpp $(HEADERS) 
    @$(PRINT_CC) $(CXX) $(call exec,$(LLVM_CONFIG) --cxxflags) $(CPPFLAGS) $(CXXFLAGS) $(DEBUGFLAGS) -c $< -o [email protected] 
... 
$(BUILD)/$(JL_LIBDIR)/libjulia-release.$(SHLIB_EXT): julia.expmap $(OBJS) flisp/libflisp.a support/libsupport.a $(LIBUV) 
@$(PRINT_LINK) $(CXX) $(SHIPFLAGS) $(OBJS) $(RPATH_ORIGIN) -shared -o [email protected] $(LDFLAGS) $(LIBS) $(SONAME) 
$(INSTALL_NAME_CMD)libjulia-release.$(SHLIB_EXT) [email protected] 

Все вроде бы правильно на месте. Насколько я понимаю, при поиске правила для jltypes.o, Make должен использовать правило %.o; однако, очевидно, он не может найти правило вообще.

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

ответ

2

Существует не %.o правило. Существует правило %.o: %.c $(HEADERS) (и его компаньон cpp). Это означает, что он может использовать его для построения jltypes.oот jltypes.c и $(HEADERS) если они есть. Поскольку исходный файл, вероятно, будет присутствовать в обеих системах, я бы предположил, что список заголовков вычисляется по-разному (и ошибочно).

Обратите внимание, что версия cvs makepp только что получила новую опционную переменную MAKEPP_DEBUG, которая заставляет ее писать подробную информацию об этих вещах. Их можно просмотреть утилитой makepplog.

Существует много больше, чтобы makepp. Помимо выполнения почти всего, что может сделать GNU, есть много более полезных вещей, и вы даже можете расширить свои make-файлы с помощью некоторых программ Perl.

+0

Вы были правы - это проблема с заголовком. Спасибо за указатели о 'makepp'; функции отладки всегда являются большой помощью для такого рода вещей. – Arman

Смежные вопросы