и спасибо за ваше время. У меня есть следующие Makefile:Сделайте объекты в Makefile
CXX = g++
CXXFLAGS = -Wall -g
SOURCES := divisor.cpp multiplier.cpp
OBJECTS := ${SOURCES:.cpp=.o}
%.o: %.cpp
$(CXX) -c $(CXXFLAGS) $< -o [email protected]
%: %.o $(OBJECTS)
$(CXX) $(CXXFLAGS) [email protected] -o [email protected]
$(OBJECTS): %.o: %.cpp
$(CXX) -c $(CXXFLAGS) $< -o [email protected]
clean:
rm -f *.o
То, что я хочу это сделать файл является следующее: Если добавить исходный файл с именем 123.cpp
в рабочий каталог, я хочу, чтобы сгенерировать свой объектный файл, а затем связать скомпилированный источники, указанные в $(SOURCES)
, это означает:
g++ -c -Wall -g 123.cpp
g++ multipler.o divisor.o 123.o -o 123
Если multiplier.cpp
или divisor.cpp
должен быть создан или обновлен, я хочу сделать, чтобы сделать это.
Но я не удается, потому что divisor.o
и multiplier.o
не создаются автоматически
Как я могу добиться этого?
Редактировать
Просто чтобы прояснить, есть два типа файлов исходного кода в рабочем каталоге: divisor.cpp
, multipler.cpp
является один тип, и любой другой файл, скажем, 123.cpp
является другой тип. В некотором смысле, divisor.cpp
и multiplier.cpp
являются реквизитами для других исходных файлов.
Я хочу, чтобы автоматизировать процесс составления необходимых условий и связать их при компиляции других файлов
g++ -c multiplier.cpp
g++ -c divisor.cpp
g++ -c -Wall -g 123.cpp
g++ multipler.o divisor.o 123.o -o 123
Во-первых, у вас нет правила в зависимости от '' $ (SOURCES) '' на месте. Вам нужно что-то похожее на то, что вы делали с '' $ (OBJECTS) '' – BitTickler
Вы не указали конечную цель в зависимости от '$ (OBJECTS)'? –
Не соответствует ли целевой '$ (ОБЪЕКТЫ)' как правило для '$ (SOURCES)' неявно? Конечная цель в зависимости от '$ (OBJECTS)' не '%:%. O $ (OBJECTS)'? Спасибо и – Jorge