2013-06-26 4 views
0

Я следующий Makefile:Создание/улучшающий Makefile

CC = g++ 
CFLAGS=-c -Wall 


all: myProgram 

myProgram: obj/main.o obj/Class1.o obj/Class2.o 
    $(CC) -o bin/myProgram obj/main.o obj/Class1.o obj/Class2.o 

obj/main.o: main.cpp 
    $(CC) $(CFLAGS) main.cpp -o obj/main.o 

obj/Class1.o: src/Class1.cpp 
    $(CC) $(CFLAGS) src/Class1.cpp -o obj/Class1.o 

obj/Class2.o: src/Class2.cpp 
    $(CC) $(CFLAGS) src/Class2.cpp -o obj/Class2.o 

Идея заключается в том у меня есть такая структура файлов/каталогов:

/project 
    Makefile 
    main.cpp 
    /src 
     Class1.cpp 
     Class2.cpp 
    /obj 
     Class1.obj 
     Class2.obj 
    /bin 
     myProgram 
    /inc 
     Class1.h 
     Class2.h 

В Makefiles принимает источники и файлы в этих каталогах объекта и выводит их в/bin как myProgram.

Я знаю, что мой make-файл может выглядеть не очень идеальным, но в любом случае. Я хочу узнать, как создавать make-файлы, так что вы рекомендуете мне добавить в мой make-файл или узнать дополнительно о make-файлах в качестве следующего шага для улучшения моих знаний? (Я мог бы работать над проектом, где мне нужно будет знать make-файлы, поэтому я пытаюсь их изучить)

+0

Ваш вопрос скорее всего будет закрыт, так как он просто вызывает споры. Масштабирование Makefile для сложного проекта в нескольких каталогах - это не самая простая вещь в мире, и я видел много способов, которыми люди это делают. Если можете, возьмите свою команду и свое «Я» в «Скинсон». Если вам нужно придерживаться их, проверьте расширения gmake и выясните способы достижения того, что вы хотите более легко. – dsign

+0

Кроме того, ваш Makefile не учитывает зависимости от файлов заголовков. Makefiles не делают этого автоматически, но есть некоторый «простой» способ, зависящий от компилятора, сделать это ... – dsign

+2

'CC = g ++' - ** Нет. ** 'CC = gcc'. Если вы хотите C++, это 'CXX'. –

ответ

1

Вот общий Makefile я создал для C, он может быть легко адаптирован к C++:

Generic Makefile for Linux

и здесь большой учебник по how to write a makefile.

+0

Я проверю ваши ссылки, спасибо –

+0

Роберт, если я попытаюсь более или менее хорошо изучить этот учебник Майкла Сафяна, позволит ли он мне сказать, что я могу создавать make-файлы для проектов с «средним» размером? –

+0

Зависит от того, что вы считаете средним. Ядро Linux использует написанные вручную make-файлы. –

0

Это довольно общий вопрос .. но позвольте мне посмотреть, могу ли я ответить на него небольшим образом

  • мишень называется чистым - необходимо
  • рекурсивные Makefiles может быть полезно узнать
  • вы должны использовать переменные, которые содержат список ваших CPP файлы и OBJ файлы, и попытаться не вводить их.

Попробуйте genmake.pl, он дает достойную структуру по умолчанию.

+0

спасибо за отзыв Да, меня интересовали такие вещи, а также, может быть, чему научиться в будущем, чтобы улучшить свои знания в make-файлах, поскольку мне может понадобиться их использовать (возможно, не для очень маленьких проектов) –