Я пытаюсь создать Makefile для простого проекта, в котором есть 3 файла и Makefile. Когда я компилирую, в консоли отображается L: make: Ничего не нужно делать для «всех». И ничего не происходит
Код:
math: main.o function.o
g++ main.o function.o -o math
main.o: main.cpp
g++ -c main.cpp
function.o: function.cpp
g++ -c function.cpp
clean:
rm *.o math
Кто-нибудь знает решение этого? Спасибо! Моя IDE — это Eclipse, к вашему сведению.
Я предлагаю добавить строку, подобную этой, в конец вашего Makefile:
all: math
Спасибо за ответ! В этом есть смысл
я пытаюсь в своей системе Linux, она работает правильно.
1 .PHONY: math
2 math: main.o function.o
3 g++ main.o function.o -o math
4
5 main.o: main.cpp
6 g++ -c main.cpp
7 function.o: function.cpp
8 g++ -c function.cpp
9
10 clean:
11 rm *.o, math
перед командной строкой должна быть вкладка. введите здесь описание изображения
Спасибо за ответ! Для чего нужен домен .PHONY?
@RatTaco, .PHONY
здесь неуместен, и я не вижу причин думать, что его добавление будет иметь для вас значение. Для получения дополнительной информации см. Каково назначение .PHONY в make-файле?
Моя IDE — это Eclipse, к вашему сведению.
Это ключевая деталь. Вы оказали себе и другим медвежью услугу, похоронив это в полукруглом комментарии в конце вопроса.
Когда я компилирую, в консоли отображается L: make: Ничего не нужно делать для «всех».
Ваша среда IDE предъявляет определенные требования к соглашениям о make-файлах, и ваш make-файл им не соответствует. В частности, представленное сообщение указывает, что он пытается создать цель с именем «все». В вашем make-файле нет правил для создания любой такой цели. Хотя это и не требуется в общем смысле, для make-файлов принято предоставлять цель с именем «все» в качестве точки входа верхнего уровня. В make-файле, предоставляющем эту цель, ее сборка должна строить весь проект, за возможным исключением тестов и целей только для поддержки тестов.
Вы можете решить эту проблему, добавив ожидаемую цель. Оно может идти куда угодно по отношению к другим правилам, но было бы наиболее условным поставить его на первое место. Кроме того, было бы неплохо, хотя и не обязательно, объявить его .PHONY
(см. Для чего .PHONY в make-файле?):
all: math
math: main.o function.o
g++ main.o function.o -o math
main.o: main.cpp
g++ -c main.cpp
function.o: function.cpp
g++ -c function.cpp
clean:
rm *.o math
.PHONY: all
Это означает, что цели имеют отметку времени позже, чем источник. Сначала сделайте чистку.
make clean
, а затемmake
. Я не вижу зависимости от файлов заголовков. Если вы измените файл заголовка, вы захотите, чтобы все исходные файлы были перестроены (в настоящее время они не будут). Я также не вижу целиall
(это своего рода традиционная, но не обязательная, но необходимая для выполненияmake all
)