2014-09-29 3 views
1

Я искал 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) 

Может кто-нибудь помочь в этом, пожалуйста?

Благодаря

ответ

0

Во-первых, заменить .cpp на .o, а затем заменить оставшуюся .c на .o.

+0

Спасибо за ваш ответ. Я не уверен, что вы подразумеваете под этим. Вы имеете в виду, что я должен сначала скомпилировать файлы CPP, а затем файлы C? Не могли бы вы рассказать? – Arn

+0

Нет, я имею в виду в строке, где переменная OBJECTS назначена в Makefile, происходит замена текста на имена файлов - суффикс SRC_EXT заменяется суффиксом «.o». Вам нужно заменить оба суффикса на «.o». – Sebastian

+0

Я вижу. Любые предложения относительно того, как я должен это делать? использование && не будет делать трюк, и это почти мой первый сложный Makefile, который я пишу. Как я могу объединить их? – Arn

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