Привет всем.
Подскажите, пожалуйста как сделать. У меня есть несколько каталогов, в них исходники и заголовки. Допустим, в каждом из каталогов независимый проект и рузельтат компиляции — испольняемый файл.
Мне нужен вневшний мэйк файл, который в каждом из каталогов:
1) скомпилит объектные файлы
2) сгенерит файлы зависимостей
3) все эти файлы разложит где надо.
4) скомпилит исп. файл
Я читал на ситфорум.ру про использование гну мэйк, но мне не подходит использованная там идея с внешним файлом — скриптом, который запустит мэйки.
Итак, подробности.
Внешний каталог:
work/
в нем
/project1
/s1.cpp
/s2.cpp
/s3.cpp
/project2
/s1.cpp
/s2.cpp
Makefile.
Пример Makefile (для начала, скомпилим только project1)
SOURCES = $(wildcard project1/*.cpp) #ага, получил имена исходников
OBJECTS = $(patsubst %.cpp,%.o,$(wildcard project1/*.cpp))#ага, имена обж.
PROJECT1 : $(OBJECTS)
g++ -o project1/PROJECT1 $^ #скомпилим здесь исп. файл
$(OBJECTS) : $(SOURCES) #В примерах пишут %.o:%.cpp
g++ -c -MD $< #вот тут проблема, объектники компилятся
#а вот файлы зависимостей - нет.
include $(wildcard project1/*.d)
Помогите.
Было бы здорово, если бы еще и сказали как объектн. и файлы зависимостей еще и в дополнительно вложенные в project1 директории помещать.
Здравствуйте Fiend, Вы писали:
F>Я читал на ситфорум.ру про использование гну мэйк, но мне не подходит использованная там идея с внешним файлом — скриптом, который запустит мэйки.
eto ne ideya eto workaround . Esli hochesh , nazyvai eto nedostatokom make. No krome nego est drugie pakety autobuilda :
cook
http://www.canb.auug.org.au/~millerp/cook/cook.html
GNU project
http://www.gnu.org/software/cons/
Jakarta
http://jakarta.apache.org/ant/
a vot v pascale takih problem net. im ne nuzhen make
Мне нужно именно мэйк использовать. Где ошибка в моем мэйкфайле (может он целиком ?
А паскаль — чур меня, не кночи он будь помянут.
Здравствуйте Fiend, Вы писали:
Так и не помогли
Здравствуйте Fiend, Вы писали:
F>Здравствуйте Fiend, Вы писали:
F>Так и не помогли
autoconf, automake
Почитать:
http://sources.redhat.com/autobook/autobook/autobook_toc.html
Здравствуйте Аноним, Вы писали:
А>autoconf, automake
А>Почитать: http://sources.redhat.com/autobook/autobook/autobook_toc.html
А чем оно тут ему поможет? autoconf + automake создают make-файлы в каждом подкаталоге,
да еще один внешний скрипт, а автору вроде как надо чтобы только один внешний Make-файл.
Ума правда не приложу зачем
В общем вопрос был как сделать через задницу автогеном, а ты советуешь как правильно
Никогда не делайте ничего правильно с первого раза, иначе никто потом не оценит, как это было сложно.
WE>А чем оно тут ему поможет? autoconf + automake создают make-файлы в каждом подкаталоге,
WE>да еще один внешний скрипт, а автору вроде как надо чтобы только один внешний Make-файл.
WE>Ума правда не приложу зачем
Ты все правильно понял.
WE>В общем вопрос был как сделать через задницу автогеном, а ты советуешь как правильно
Грубо, но справедливо. Мне это не надо. От меня требуют так сделать. В качестве мотивации дают статью, где много чего понаписано, и сказано, что рекурс. мэйк — плохо, а такой (какой надо) — хорошо.
Здравствуйте Fiend, Вы писали:
F>Пример Makefile (для начала, скомпилим только project1)
F>
F>F>SOURCES = $(wildcard project1/*.cpp) #ага, получил имена исходников
F>OBJECTS = $(patsubst %.cpp,%.o,$(wildcard project1/*.cpp))#ага, имена обж.
F>PROJECT1 : $(OBJECTS)
F> g++ -o project1/PROJECT1 $^ #скомпилим здесь исп. файл
F>$(OBJECTS) : $(SOURCES) #В примерах пишут %.o:%.cpp
F> g++ -c -MD $< #вот тут проблема, объектники компилятся
F>#а вот файлы зависимостей - нет.
F>include $(wildcard project1/*.d)
F>
F>Помогите.
F>Было бы здорово, если бы еще и сказали как объектн. и файлы зависимостей еще и в дополнительно вложенные в project1 директории помещать.
Да, сочувствую.
Ну насчет помещения объектников и зависимостей во вложенные папки — это примерно так:
project1/obj/%.o: project1/%.cpp
g++ -Wp,-MD,project1/.deps/$(*F).d -c $< -o $(@D)/obj/$(@F)
Что не так с твоими правилами $(OBJECTS) : $(SOURCES) сходу не соображу, но что-то явно не так.
Честно говоря ни разу не видел и нигде не читал чтобы кто-то так извращался. А статейка про то что
рекурсивный make плохо — она общедоступна? Можно линк?
Никогда не делайте ничего правильно с первого раза, иначе никто потом не оценит, как это было сложно.
Да, статейка доступна. Там даже решение предлагается — мне ее правда поздно дали, я уж успел сюда написать. А находится она здесь:
http://aegis.sourceforge.net/auug97.pdf