Я искал Makefile для компиляции огромного проекта, который содержит много файлов C и C++. Я использовал Eclipse для его компиляции, но я хочу перейти в автономный Makefile. Я нашел этот общий файл Makefile, который отлично работает с моим проектом, за исключением того, что он может компилировать только C или C++, но не оба в одном запуске ... поэтому он не работает во время связывания.Makefile для создания файлов C и CPP
Биты оригинального Makefile, которые компилируются для CPP или C:
SRC_EXT = cpp
OURCES = $(shell find $(SRC_PATH)/ -name '*.$(SRC_EXT)' -printf '%[email protected]\t%p\n' \
SOURCES = $(shell find $(SRC_PATH)/ -name '*.$(CPP_EXT)' -o -name '*.$(C_EXT)' -printf '%[email protected]\t%p\n' \
| sort -k 1nr | cut -f2-)
# fallback in case the above fails
rwildcard = $(foreach d, $(wildcard $1*), $(call rwildcard,$d/,$2) \
$(filter $(subst *,%,$2), $d))
ifeq ($(SOURCES),)
SOURCES := $(call rwildcard, $(SRC_PATH)/, *.$(SRC_EXT))
endif
OBJECTS = $(SOURCES:$(SRC_PATH)/%.$(SRC_EXT)=$(BUILD_PATH)/%.o)
DEPS = $(OBJECTS:.o=.d)
Я пытался изменить его, чтобы быть:
SRC_EXT = cpp c
SOURCES = $(shell find $(SRC_PATH)/ -name '*.$(CPP_EXT)' -o -name '*.$(C_EXT)' -printf '%[email protected]\t%p\n' \
| sort -k 1nr | cut -f2-)
# fallback in case the above fails
rwildcard = $(foreach d, $(wildcard $1*), $(call rwildcard,$d/,$2) \
$(filter $(subst *,%,$2), $d))
ifeq ($(SOURCES),)
SOURCES := $(call rwildcard, $(SRC_PATH)/, *.$(SRC_EXT))
endif
Но я не уверен, что делать с ОБЪЕКТОВ чтобы заставить его работать с несколькими расширениями:
OBJECTS = $(SOURCES:$(SRC_PATH)/%.$(SRC_EXT)=$(BUILD_PATH)/%.o)
Может кто-нибудь помочь в этом, пожалуйста?
Благодаря
Спасибо за ваш ответ. Я не уверен, что вы подразумеваете под этим. Вы имеете в виду, что я должен сначала скомпилировать файлы CPP, а затем файлы C? Не могли бы вы рассказать? – Arn
Нет, я имею в виду в строке, где переменная OBJECTS назначена в Makefile, происходит замена текста на имена файлов - суффикс SRC_EXT заменяется суффиксом «.o». Вам нужно заменить оба суффикса на «.o». – Sebastian
Я вижу. Любые предложения относительно того, как я должен это делать? использование && не будет делать трюк, и это почти мой первый сложный Makefile, который я пишу. Как я могу объединить их? – Arn