LINUX.ORG.RU

Makefile


0

0

Здраствуйте. Вот "шаблон" makefil'а :

all:цель1

цель1: цель2
<tab><tab>bla-bla

цель2: 
<tab><tab>$(MAKE) -f Makefile --directory=my_dir/

При первом make цель2 собирается затем собирается цель1.
Но при последующих цель 2 грит не требуется выполнения команд, 
а цель 1 всеравно пересобирается.

Вопрос : как мне сделать чтоб цель 1 не пересобиралась?
anonymous

смысл в том что для "цель1" у тебя требуется наличие up-to-date файла с названием "цель2"

либо man make либо делай такой файл (touch цель2)

laad
()
Ответ на: комментарий от laad

Вот отрывок из реального makefil'а

all : $(bin_server)

$(bin_server): lib/lib$(name_lib_serv).so $(project_objects)
        $(CXX) -o $@ $(project_objects) $(LDFLAGS) \
        -l$(THREAD_LIB) -L./lib -l$(name_lib_serv)

server.o: server.cpp
        $(CXX) -c $< $(CXXFLAGS) $(THREADFLAGS) \
        $(INC_ALL) -I include/

lib/lib$(name_lib_serv).so:
        @$(MAKE) -f Makefile CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" \
        name_lib_serv="$(name_lib_serv)" INC_PATH_FIRE="$(INC_PATH_FIRE)" \
        --directory=lib/

anonymous
()
Ответ на: комментарий от anonymous

ТО есть мне надо чтоб цель2 зависила от какогото файла который создается при ее компиляции или я непрально понял?

anonymous
()
Ответ на: комментарий от anonymous

>$(bin_server): lib/lib$(name_lib_serv).so $(project_objects)

если все эти lib/lib$(name_lib_serv).so $(project_objects) создаются - $(bin_server) не должен пересобираться

laad
()
Ответ на: комментарий от laad

Абсолютно все создаются. Когда я набираю повторно make. 
То на консоль выводится следующее :
user>make
make[1]: Entering directory `/home/user/project/my_dir'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/user/project/my_dir'
g++ -o Server <тут список $(project_objects)> -L./lib -l<а тут name_lib_serv>
user>
и фсё :(

anonymous
()
Ответ на: комментарий от anonymous

lib/lib$(name_lib_serv).so:

означает что цель сама по себе. и если она есть, ссылка на нее пересобираться не будет.

праильно писанный Makefile выглядит так:

цель-объект: <все файлы которые используются при построении>

цель-lib/exe: <все объекты цели>

для построения объектов список файлов тебе препроцессор соорудит (опции -M). с объектами играйся через $(wildcard) или .PHONY, раз уж хочешь мильён мейкфалов для зависимых целей

lb
()
Ответ на: комментарий от lb

>раз уж хочешь мильён мейкфалов для зависимых целей я просто хотел разделить отдельно библиотеку и приложение :( типа инкапсуляция или как там по русски?

по видимому все прийдется в одном make-file делать Всем !!!Спасибо большое!!! за помосчь.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.