Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2018, 00:17   #1
pcmax
Пользователь
 
Регистрация: 12.04.2018
Сообщений: 19
По умолчанию Makefile

помогите разобраться что такое цель в Makefile

вот имеются два файла file.cpp и file1.cpp в первом файле содержится функция , которая будет вызванна в file1.cpp , который является основной программой.
ну так вот я пишу make где указываю цель target
target: file.cpp file1.cpp
g++ -c file.cpp file1.cpp
g++ file.o file1.o -o out

так вот, что есть цель? имя файла? какого, того что будет на выходе? на выходе будет файл с именем out. тагда зачем цель? или цель должна совпадать с out* то есть с тем словом что будет указанно при сборке ?
это очень важно для меня
pcmax вне форума Ответить с цитированием
Старый 15.04.2018, 00:24   #2
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

почитайте тут https://ru.wikipedia.org/wiki/Makefile или тут https://habrahabr.ru/post/155201/
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Старый 15.04.2018, 12:38   #3
pcmax
Пользователь
 
Регистрация: 12.04.2018
Сообщений: 19
По умолчанию

я так и не понял: вот то имя, в цели, после которого стоит двоеточие, оно на что влияет?
target: dependencies
system command(s)
Целью обычно является имя файла, который генерируется программой;
но имя файла получается то которое я задам после ключа -о
g++ file.o file1.o -o fnamefile
pcmax вне форума Ответить с цитированием
Старый 15.04.2018, 13:37   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Так там кроме имени цели еще задается и "правило" как его получить.
В вашем случае будет
Код:
fnamefile: file.o file1.o
  g++ file.o file1.o -o fnamefile
waleri вне форума Ответить с цитированием
Старый 15.04.2018, 19:14   #5
pcmax
Пользователь
 
Регистрация: 12.04.2018
Сообщений: 19
По умолчанию

не не , ребята , вы не поняли меня. опять я налепил что-то, что невозможно осмыслить. но как -то вроде до меня дошло, что вот это слово перед двоеточием ,что зовется целью, есть цель для make. то есть если мы создадим цель-from допустим и сделам так make from то среди остальных целей в Makefile будет исполненна лишь from.
но зачем это? если сделать просто make , то будет идти все попорядку сверух вниз. для того мы и пишем makfile чтобы автоматизировать эту сборку. а так что ж, каждый раз указывать make -и цель? или это для того чтобы только одна цель была обработанна из make? ну понять бы можно было вот создаю я makefile для разных архитектур допустим для x86 и arm и делаю в одном makeflle две цели x86 и arm...
но тогда пользователю нужно будет делать или make arm или make x86. но вдеь я таких makefile никогда не встерчал. объясните
pcmax вне форума Ответить с цитированием
Старый 15.04.2018, 19:16   #6
pcmax
Пользователь
 
Регистрация: 12.04.2018
Сообщений: 19
По умолчанию

про зависимости вроде я понял. у меня не уклавывалось имя и цель.
pcmax вне форума Ответить с цитированием
Старый 15.04.2018, 20:49   #7
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

pcmax
Цитата:
Сообщение от pcmax Посмотреть сообщение
но зачем это?
Вы изменили 1 файл. А в проекте их может быть десятки. Вот чтобы не компилировать каждый компилируется только 1 файл. Вот вам и ускорение в несколько раз.
А так же обычно обычно используют для другого установки, удаления и очистки.

Цитата:
Сообщение от pcmax Посмотреть сообщение
я так и не понял: вот то имя, в цели, после которого стоит двоеточие, оно на что влияет?
target: dependencies
system command(s)
Целью обычно является имя файла, который генерируется программой;
но имя файла получается то которое я задам после ключа -о
g++ file.o file1.o -o fnamefile
make тупая утелита она ничего не знает о g++ сс и прочих компиляторах. Поэтому выходное имя должно совпадать с целью. Иначе более главная цель, та которая зависит от текущей не сможет найти выходной файл.
Она видет dependencies зависимости и поочерёдно вызывает эти цели. Вот что-бы их найти и нужно target а после make сверяет дату выходного файл из подчернённой цели с выходным файлом текущей. И если больше то пересобирает текущую цель. Если fnamefile и taget подчинённой цели не совпадёт, то текущая цель не соберётся.

Цитата:
Сообщение от pcmax Посмотреть сообщение
x86. но вдеь я таких makefile никогда не встерчал.
А почему бы и нет?

Всё это философиякультура юникс. Вы пишете программу как вам её протестировать? Ввести параметры посмотреть что она выдала. Вот разработчики make решили вводить параметры через командную строку. Ведь это удобно для отладки makefile написанных вручну. А так вручную makefile никто не вызывает и не пишет их вручную. Обычно их вызывает скрипт сборки. Среда разработки. Да и генерирует makfile так же среда разработки. Зато разработчикам которые писали эти сервисы, инфраструктуру. Им было удобно то что make принимает параметры через командую строку. Такие файлы проще оптимизировать и проще проверить результаты своих программ.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 15.04.2018 в 20:52.
Pavia вне форума Ответить с цитированием
Старый 15.04.2018, 21:54   #8
pcmax
Пользователь
 
Регистрация: 12.04.2018
Сообщений: 19
По умолчанию

спасибо, хоть что-то в мой темный ум дошло
pcmax вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Makefile Chopic Общие вопросы C/C++ 0 03.04.2015 21:23
Makefile 220Volt Общие вопросы C/C++ 6 10.07.2014 00:47
Makefile и gcc vedro-compota Общие вопросы C/C++ 2 05.05.2011 18:42
Makefile Nostalgia Общие вопросы C/C++ 3 18.10.2010 14:36
makefile Kill-All-N-Thrash Общие вопросы C/C++ 8 29.08.2010 23:15