Я пытаюсь написать то, что, как я думал, будет довольно простым Makefile, и я просто озадачен! Я не автор сценариев, но я думал, что понял их достаточно, чтобы иметь возможность работать простым.Борьба с GCC Makefile
Хорошо, у меня есть небольшой проект в каталоге, а также в этом каталоге есть каталог libs, содержащий много файлов .c. То, что я пытаюсь сделать, это написать make-файл, который будет создавать содержимое каталога/libs в статический файл lib в каталоге/libs, а затем скомпилировать несколько исходных файлов в каталоге/и связать его со встроенным .a файл.
Я уверен, что кто-то собирается предложить «почему бы не использовать CMake», но это не ответ я ищу (волны рукой, как джедай .. ehehehehe)
CC = gcc
CFLAGS = -Wall
SOURCES = lzx.c csum.c dirs.c listner.c tree.c
OBJECTS = $(SOURCES:.c=.o)
TARGETLIB = libs/mylib.a
TARGET = TestApp
libs/%.o : libs/%.c
$(CC) $CFLAGS -c $<
$(TARGETLIB) : $(OBJECTS)
ar rcs [email protected] $^
$(TARGET) :
$(CC) $CFLAGS Source1.cpp Source2.cpp -llibs/mylib.a -o [email protected]
Мое понимание было то, что первый рецепт, скомпилировал бы все .c-файлы в объекты, но, похоже, скомпилировал первый .c-файл, а затем остановился.
Любая помощь, которую кто-либо мог бы дать мне, будет оценен по достоинству.
См. [This] (http://stackoverflow.com/a/16751650/841108) & [that] (http://stackoverflow.com/a/26689798/841108) примеры. Используйте недавний 'make' с' make -trace' или [remake] (http://bashdb.sourceforge.net/remake/) '-x'. Используйте $ ([patsubst] (https://www.gnu.org/software/make/manual/html_node/Text-Functions.html) ...); или иметь внутренний 'libs/Makefile' и использовать' $ (MAKE) -C libs' –
Спасибо Базиле, но я уже посмотрел на эти примеры, и хотя они близки, они не совсем делают то, что я пытаясь сделать. Моя основная проблема заключается в% .o:% .c, который в моей голове должен скомпилировать все .c-файлы в каталоге libs /, но на самом деле только компилирует первый файл в списке, а затем сбой по какой-либо причине, которую я не могу объяснить. make -trace - хорошая идея. –
Итак, 'libs /' содержит 'lzx.c csum.c dirs.c listner.c tree.c', и те файлы, которые вы хотите скомпилировать и объединить, чтобы сформировать' libs/mylib.a', правильно? – Beta