Я пытаюсь построить мой проект c на окнах с помощью makefile и nmake.Цикл Makefile в дереве зависимостей
я получаю следующее сообщение об ошибке: NMAKE : fatal error U1071: cycle in dependency tree for target 'src\source.c' Stop.
Полный Makefile является это
CC = cl
LINK = link
CFLAGS = /Ox \
/I ext\MulticoreBSP-for-C\ \
/I ext\unistd\include \
/I ext\pthreads-win32\sources\pthreads-w32-2-9-1-release \
/D HAVE_STRUCT_TIMESPEC
SOURCE_DIR = src
OBJECT_DIR = build
LIBS = ext\pthreads-win32\sources\pthreads-w32-2-9-1-release\pthreadVC2.lib
DLLS = bin\pthreadVC2.dll
DLLS_SRC = ext\pthreads-win32\sources\pthreads-w32-2-9-1-release\pthreadVC2.dll
BSP_SOURCES = ext\MulticoreBSP-for-C\mcbsp.c ext\MulticoreBSP-for-C\mcinternal.c ext\MulticoreBSP-for-C\mcutil.c
USER_SOURCES = source.c
SOURCES = src\$(USER_SOURCES) $(BSP_SOURCES)
OBJECTS = $(SOURCES:*.c=build\*.obj)
# OBJECTS = build\source.obj build\mcbsp.obj build\mcinternal.obj build\mcutil.obj
EXECUTABLE = bin\BSP.exe
all: $(EXECUTABLE) $(DLLS) $(OBJECTS)
$(EXECUTABLE): $(OBJECTS)
$(LINK) $(OBJECTS) $(LIBS) /OUT:$(EXECUTABLE)
$(DLLS): $(DLLS_SRC)
copy $** [email protected]
$(OBJECTS): $(SOURCES)
$(CC) $(LDFLAGS) /c /Fo.\$(OBJECT_DIR)\ [email protected] $** $(CFLAGS)
clean:
del $(OBJECT_DIR)\*.obj bin\*.dll bin\*.exe
Я вижу, что вопрос идет от определения OBJECTS
в строке 21, как OBJECTS = $(SOURCES:*.c=build\*.obj)
и затем с правилом $(OBJECTS): $(SOURCES)
, Тот факт, что это циклический, достаточно ясен, и использование прокомментированного определения OBJECTS
в строке 22 отлично работает.
Как я могу получить автоматическое определение OBJECTS
без правила в строке 33, вызывающего проблемы? Нужно ли мне другое правило или что-то еще?
(У меня есть отдельные папки для исходных файлов и объектов, и я думаю, что это мешает мне использовать простое правило вроде .c.obj:
. По крайней мере, у меня нет работы, чтобы использовать что-то из этой формы).
Спасибо.
Вы пробовали распечатать 'SOURCES' и' OBJECTS', чтобы убедиться, что они верны? –
Кроме того, прямо сейчас * все * объектные файлы зависят от * all * исходных файлов. Поэтому изменение одного исходного файла приведет к перекомпиляции всех исходных файлов. –
Спасибо, Иоахим. После повторения переменной 'OBJECTS' кажется, что strsub не работает, а переменная' OBJECTS' идентична 'SOURCES'. Мне придется задуматься над этим, если у вас нет идеи, почему он не работает. – Sam