Makefile не восстанавливает основную цель после удаления - PullRequest
0 голосов
/ 29 апреля 2019

я учусь писать makefile. Я встречаю проблему сегодня. Мой make-файл успешно становится главной целью. Затем я удаляю основную цель и снова запускаю команду «make». Но make-файл не сделал основной целью, просто покажите «make:` main.o 'является актуальной ». Я не знаю почему. Вот мой make-файл и структура папок:

CXX := g++          
FLAGS := -std=c++11                                                                                                                       

INCLUDE_DIR := $(shell find . -type d)
SOURCE_DIR := $(INCLUDE_DIR)

SOURCE_FILE := $(foreach dir, $(SOURCE_DIR), $(wildcard $(dir)/*.cpp))

OBJECT_FILE := $(SOURCE_FILE:%.cpp=%.o)

-include $(OBJECT_FILE:%.o=%.d)

TARGET := app       

all: $(TARGET)      

$(TARGET): $(OBJECT_FILE)
    $(CXX) $(FLAGS) -o $@ $(OBJECT_FILE)

$(OBJECT_FILE): %.o: %.cpp | $(SOURCE_DIR)
    $(CXX) $(FLAGS) -c $< -o $@ -MD -MF $(@:.o=.d)


./-----main.cpp
|---test
    |---func.h
    |---func.cpp

1 Ответ

2 голосов
/ 29 апреля 2019

Если вы не выберете конкретную цель для сборки в командной строке (через make <target>), make всегда будет выбирать первую цель, которую видит в make-файле, в качестве цели по умолчанию для сборки

Рассмотрим эти строки в вашем make-файле:

-include $(OBJECT_FILE:%.o=%.d)

TARGET := app

all: $(TARGET)

Когда ничего не построено, .d файлов нет, поэтому -include ничего не включает. Затем make находит цель all и использует ее по умолчанию.

Во второй раз через make-файл находятся .d файлы, поэтому команда -include включает их. Эти файлы определяют некоторые цели, первая из которых main.o, и теперь это первая цель, созданная по умолчанию.

Вы должны переместить -include вниз до end файла makefile и убедиться, что цель all всегда является первой созданной.

Так же, как в стороне, я не знаю, является ли это артефактом вашего вырезания и вставки в SO, но многие из ваших строк имеют дополнительный пробел в конце. Вы должны знать, что во многих местах дополнительные пробелы в конце строк ЗНАЧИТЕЛЬНО в make-файлах. Я настоятельно рекомендую использовать редактор, который позволит вам визуализировать пробелы и / или автоматически удалять лишние пробелы в конце строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...