Вопросы о makefile - PullRequest
       3

Вопросы о makefile

0 голосов
/ 13 сентября 2011

Вот простой make-файл.

У меня есть 2 вопроса.

  1. all: $ (SOURCES) $ (EXECUTABLE) Зачем ставить SOURCE в зависимость.
  2. ". Cpp.o:" Почему бы не написать ".o: .cpp"

    CC=g++
    
    CFLAGS=-c -Wall
    
    LDFLAGS=
    
    SOURCES=main.cpp hello.cpp factorial.cpp
    
    OBJECTS=$(SOURCES:.cpp=.o)
    
    EXECUTABLE=hello
    
    
    all: $(SOURCES) $(EXECUTABLE)
    
    $(EXECUTABLE): $(OBJECTS) 
    
        $(CC) $(LDFLAGS) $(OBJECTS) -o $@
    
    .cpp.o:
    
        $(CC) $(CFLAGS) $< -o $@
    

1 Ответ

1 голос
/ 13 сентября 2011

Зависимость all от $(SOURCES) не является необходимой или даже полезной. Информация о зависимостях должна быть такой, чтобы исполняемый файл зависел от объектных файлов, а объектные файлы зависели от исходных файлов.

Обозначения:

.cpp.o:

был способом, которым оригинальная (7-е издание UNIX ™) версия make обрабатывала правила компиляции. GNU Make (и Sun Make) использовали запись %, чтобы разрешить:

%.o: %.cpp

По сути, это было дизайнерское решение, которое имело смысл в то время и, может быть, менее целесообразно в ретроспективе. Это была не самая вопиющая проблема (это были бы вкладки в начале командной строки).

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