приветствую.. В общем, не удается написать makefile, чтобы все объектники клались, допустим, в папку project/obj/, а не в туже папку, где лежат сорцы. Допустим такой вот makefile: OBJS=../obj/file1.o ../obj/file2.o ... ../obj/file10.o SRCS= file1.c file2.c ... file10.c TARGET=file.out all: $(TARGET) $(TARGET): $(OBJS) g++ -o $(TARGET) $(OBJS) и для каждого объектника приходится писать что-то типа: ../obj/file1.o:file1.c g++ -c -o $@ $^ ... ... ../obj/file10.o:file10.c g++ -c -o $@ $^ А можно как-нибудь создание этих объектников записать покомпактнее, т.е не писать для каждого отдельно команды компиляции?
http://www.gnu.org/software/make/manual/make.html#index-OUTPUT_005fOPTION-838 Every rule that produces an object file uses the variable OUTPUT_OPTION. make defines this variable either to contain `-o $@', or to be empty, depending on a compile-time option. You need the `-o' option to ensure that the output goes into the right file when the source file is in a different directory, as when using VPATH (see Directory Search). However, compilers on some systems do not accept a `-o' switch for object files. If you use such a system, and use VPATH, some compilations will put their output in the wrong place. A possible workaround for this problem is to give OUTPUT_OPTION the value `; mv $*.o $@'.
Да. Я обычно пишу так: Код (Text): CXX=g++ CXXFLAGS=-Wall -ggdb3 program: file1.o file2.o fileN.o g++ -o $@ $^ Этого достаточно, ибо make сам знает как из .c сделать .o: Код (Text): info make "Implicit Rules" "Catalogue of Rules" Хотя в ситуациях посложнее, всё же приходится явно писать зависимости, особенно зависимости от заголовков, то есть появляется куча строк вида: Код (Text): file1.o: file1.c file1.h common.h Но с этим можно бороться генерируя пререквизиты автоматически. И в info make где-то было про это. Там по-моему даже готовый скрипт есть.
Ах да, только сейчас обратил внимание. Тебе придётся переименовать все твои .c во что-нибудь более пристойное, типа .cpp, .cc, .c++, .cxx. то есть приделать расширения которое будет говорить make'у что твои файлы всёж содержат c++ код.
Ну на мой взгляд, всё же проще придерживаться стандартов в именовании файлов, чем каждый раз создавая Makefile переписывать стандартные правила зашитые в make.
valterg Эээ... Сам перечитай. Вопрос состоит из двух частей. Даже правильнее сказать, что просто ТС задал два вопроса. На первый ответили. Мне есть что добавить, но я не думаю что разговоры о генерации Makefile'ов скриптами тут уместны. Даже если это стандартные пути решения данной проблемы типа automake и autoconf. И, не считая необходимым развивать тему, я решил прояснить ситуацию со вторым вопросом. Получилось длинновато, в три поста (уже даже в четыре), но... Ты считаешь мне стоит принести общественности публичные извинения?
1) где ты видишь второй вопрос ? 2) ТС больше не появлялся. Зачем тему поднимать и придумывать вопросы...
valterg 1. Вот он второй вопрос: "А можно как-нибудь создание этих объектников записать покомпактнее, т.е не писать для каждого отдельно команды компиляции?" 2. Сейчас мы развиваем эту тему сверху, общаясь с тобой. А изначально, я дату кривовато посмотрел и ошибся на месяц. 3. Я не столь нетерпим как ты, и если ты придумаешь ещё какие-нибудь вопросы мне, не стесняйся, задавай сразу же.