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
имеет встроенные правила, которые знают, как скомпилировать простую программу.
Простой способ
Создайте тестовую программу hello world с именем test.cpp.
#include <iostream> using namespace std; int main() { cout << "Hello, World! << endl; return 0; }
Изменить каталоги с
cd
в каталог, содержащий test.cpp и запуститьmake
,make CC=g++ test
Для запуска вышеуказанной команды
make
а такжеg++
должен быть установлен.Запустите исполняемый файл теста.
./test
Результаты
./test
:Hello, World!
Трудный путь
Создайте тестовую программу hello world с именем test.cpp, так же, как и простым способом.
Изменить каталоги с
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++
,Бежать
make
,make -f makefile1
Для запуска вышеуказанной команды
make
clang
а такжеg++
должен быть установлен.Запустите исполняемый файл Hello.
./Hello
Результаты
./Hello
:Hello, World!