Makefile необычное поведение

Я написал файл make для простой программы cpp, содержащей cout заявления.

#This a makefile for compiling the hello world cpp program.
   CC=clang++
   all: run test.o 
   run: .cpp=.o
  .PHONY: clean
   clean:
        rm -rf *.o run

но это не компилирует мой test.cpp. Из учебника я взял эту идею, что make достаточно умен для компиляции зависимости и цели, если ничего не указано.

Что не так?

Благодарю.

1 ответ

Решение

В вашем случае нет необходимости в make-файле, так как make имеет встроенные правила, которые знают, как скомпилировать простую программу.

Простой способ

  1. Создайте тестовую программу hello world с именем test.cpp.

    #include <iostream>
    using namespace std;
    
    int main() 
    {
        cout << "Hello, World! << endl;
        return 0;
    }
    
  2. Изменить каталоги с cd в каталог, содержащий test.cpp и запуститьmake,

    make CC=g++ test  
    

    Для запуска вышеуказанной команды make а также g++ должен быть установлен.

  3. Запустите исполняемый файл теста.

    ./test  
    
  4. Результаты ./test:

    Hello, World! 
    

Трудный путь

  1. Создайте тестовую программу hello world с именем test.cpp, так же, как и простым способом.

  2. Изменить каталоги с cd в каталог, содержащий test.cpp и создайте make-файл с именем makefile1.

    CC      = clang++
    CFLAGS  = -g
    RM      = rm -f
    
    default: all
    all: Hello
    Hello: test.cpp
        $(CC) $(CFLAGS) -o Hello test.cpp
    clean veryclean:
        $(RM) Hello  
    

    Две строки с отступом должны начинаться с табуляции, а не с 4 пробелов. Приведенный выше make-файл также будет работать правильно, если вы замените clang++ с g++,

  3. Бежатьmake,

    make -f makefile1  
    

    Для запуска вышеуказанной команды makeclang а также g++ должен быть установлен.

  4. Запустите исполняемый файл Hello.

    ./Hello  
    
  5. Результаты ./Hello:

    Hello, World! 
    
Другие вопросы по тегам