Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,531
1

Почему экзешник make.exe (вернее, его разновидность mingw32-make.exe) принимает неизвестные параметры?

13.10.2014, 20:46. Просмотров 1615. Ответов 10
Метки нет (Все метки)

Друзья! У меня есть одна из сборок mingw, а там, как известно файл make.exe отсутствует, а вместо него есть файл mingw32-make.exe

Суть в чём. Имеем папку в ней сырец main.cpp такого содержания:

C++
1
2
3
4
//main.cpp
int main()
{
}
В этой же папке Makefile.win, его содержание приведу лишь при необходимости. Скажу лишь, что он сгенерирован одной из IDE, которой я пользуюсь и довольно-таки стандартен.

Компилю main.cpp с помощью mingw32-make.exe
Bash
1
mingw32-make.exe -f Makefile.win
Всё ОК, на выходе main.exe

А теперь ВТОРОЙ РАЗ компилю main.cpp с помощью mingw32-make.exe, следите за руками:
Bash
1
mingw32-make.exe -f Makefile.win clean all
Добавились параметры clean all, они нужны, поскольку в рассматриваемом папке УЖЕ присутствует main.exe (после первой компиляции)

И всё ничего, но таких параметров (clean all) у mingw32-make.exe просто напосто нет!
Вот вывод mingw32-make.exe -h
Usage: mingw32-make.exe [options] [target] ...
Options:
-b, -m Ignored for compatibility.
-B, --always-make Unconditionally make all targets.
-C DIRECTORY, --directory=DIRECTORY
Change to DIRECTORY before doing anything.
-d Print lots of debugging information.
--debug[=FLAGS] Print various types of debugging information.
-e, --environment-overrides
Environment variables override makefiles.
--eval=STRING Evaluate STRING as a makefile statement.
-f FILE, --file=FILE, --makefile=FILE
Read FILE as a makefile.
-h, --help Print this message and exit.
-i, --ignore-errors Ignore errors from recipes.
-I DIRECTORY, --include-dir=DIRECTORY
Search DIRECTORY for included makefiles.
-j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg.
-k, --keep-going Keep going when some targets can't be made.
-l [N], --load-average[=N], --max-load[=N]
Don't start multiple jobs unless load is below N.
-L, --check-symlink-times Use the latest mtime between symlinks and target.
-n, --just-print, --dry-run, --recon
Don't actually run any recipe; just print them.
-o FILE, --old-file=FILE, --assume-old=FILE
Consider FILE to be very old and don't remake it.
-p, --print-data-base Print make's internal database.
-q, --question Run no recipe; exit status says if up to date.
-r, --no-builtin-rules Disable the built-in implicit rules.
-R, --no-builtin-variables Disable the built-in variable settings.
-s, --silent, --quiet Don't echo recipes.
-S, --no-keep-going, --stop
Turns off -k.
-t, --touch Touch targets instead of remaking them.
-v, --version Print the version number of make and exit.
-w, --print-directory Print the current directory.
--no-print-directory Turn off -w, even if it was turned on implicitly.
-W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE
Consider FILE to be infinitely new.
--warn-undefined-variables Warn when an undefined variable is referenced.

This program built for i386-pc-mingw32
Report bugs to <bug-make@gnu.org>
, как видно, clean all тут и не пахнет

Так почему же mingw32-make.exe принимает неизвестные параметры? (Сам я их подсмотрел в OllyDbg, приаттачив туда IDE и увидел, какие процессы она порождает по команде "пересроить всё" и с какими параметрами)

В ресурсах подобного рода такие вопросы, понятное дело, не обсуждаются. Спасибо, кто откликнется.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2014, 20:46
Ответы с готовыми решениями:

Компиляция библиотеки через make.exe
Скачал исходный код библиотеки oglft-0.9, скачал make-3.81.exe, не могу понять...

Параметры команды make
Как правильно написать несколько параметров для команды make? Не получается ...

Длина short[] - Почему размер массива внутри make отличается?
Доброе время суток, господа. #include &lt;iostream&gt; #include &lt;vector&gt;...

Команда Make
Какой путь указать для этой команды?

Компиляция MAKE
Запустил Makefile в ubuntu командой make в папке cursortest. Далее мне выдает:...

10
retmas
Жарю без масла
865 / 747 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
13.10.2014, 21:04 2
clean all - это не опция (option), а цели (targets):
clean - как правило, очистить проект (см свой makefile за подробностями цели clean)
all - собрать (см туда же)
0
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,531
13.10.2014, 21:15  [ТС] 3
Я считал если что-нибудь эдакое (цели, опции, параметры- да как ни назови) присутствует в командной строке, правильно о них упомянуть по команде -h, а о них ничего не сказано.

Добавлено через 1 минуту
Вот кстати, да, там же присутствует такое слово: [target], так почему же нет раздела
[target]... и описание
Добавлено через 2 минуты
Хотя бы даже из тех соображений, что я как программист, должен знать перечень ВСЕХ целей, чтобы использовать их в своей работе, а я случайно узнал только две (как раз и тянет назвать их опциями, ибо они таковые по сути и есть). Опции же показываются все? Показываются.
0
retmas
Жарю без масла
865 / 747 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
13.10.2014, 21:17 4
а ты хотел весь мануал увидеть с -h? поверь там очень много про цели и не только...

Добавлено через 2 минуты
кстати эти цели не есть встроенные, а описанные в makefile'е. залезь в него и увидишь их описание. а называться они могут как угодно. это просто одни из "принятых" названий
0
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,531
13.10.2014, 21:21  [ТС] 5
Цитата Сообщение от retmas Посмотреть сообщение
а ты хотел весь мануал увидеть с -h? поверь там очень много про цели и не только...
Я трудностей не боюсь. Мне хотя бы увидеть, хоть самые распространённые цели. Вменяемые разработчики так и поступают, например, я где-то видел -h с разным уровнем подробностей. А тут вообще- ноль.

Добавлено через 2 минуты
Цитата Сообщение от retmas Посмотреть сообщение
кстати эти цели не есть встроенные, а описанные в makefile'е. залезь в него и увидишь их описание. а называться они могут как угодно. это просто одни из "принятых" названий
Ну допустим. Сейчас мне IDE сгенерила makefile а если я буду его составлять сам? Мне откуда их брать, чтобы туда написать? Например, параметры командной строки я знаю для g++, где брать. А где брать цели для создания makefile САМОМУ- неизвестно.
0
Kastaneda
Jesus loves me
Эксперт С++
4938 / 3014 / 346
Регистрация: 12.12.2009
Сообщений: 7,610
Записей в блоге: 2
Завершенные тесты: 1
13.10.2014, 22:35 6
Открываешь Makefile, смотришь цели. Это и есть аргументы для make. Они выглядят так
Bash
1
goal:
Добавлено через 1 минуту
Цитата Сообщение от kravam Посмотреть сообщение
А где брать цели для создания makefile САМОМУ- неизвестно.
Ты их сам придумываешь. Обычно all означает собрать весь проект. Но ты можешь обозвать ее как угодно, хоть makemepleasallmyproject.

Добавлено через 3 минуты
Примитивный пример Makefile
Код
makemepleasallmyproject: src.cpp
	g++ -o progname src.cpp
запускаме make
Bash
1
make makemepleasallmyproject
на выходе имеем исполняемый progname
0
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,531
13.10.2014, 22:38  [ТС] 7
Цитата Сообщение от Kastaneda Посмотреть сообщение
Открываешь Makefile, смотришь цели. Это и есть аргументы для make. Они выглядят так
Может, я неправильно поставил вопрос? Спрошу по- другому. Представим себе, что я качнул у того же nixmana или ещё где сборку mingw и решил использовать make; где мне брать туториал по составлению mikefila? Мне

В сборках mingw makefila нет! Мне нечего брать за образец!

И что-то мне подсказывает, где-то в недрах mingw и должны быть описаны все эти clean, all и прочая, но где именно?

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
Обычно all
Во-во. Обычно, как правило...

В интернете всё тоже обычно да как правило. А мне нужно точно. По пунктам- для данного mingw32-make.exe makefile пишется по таким-то и таким-то правилам. И пусть эти правила будут самые нестрогие! Но пусть они будут! А их нет...
0
Kastaneda
Jesus loves me
Эксперт С++
4938 / 3014 / 346
Регистрация: 12.12.2009
Сообщений: 7,610
Записей в блоге: 2
Завершенные тесты: 1
13.10.2014, 22:51 8
Цитата Сообщение от kravam Посмотреть сообщение
для данного mingw32-make.exe makefile пишется по таким-то и таким-то правилам.
Нет, не так. Есть общие правила для Makefile. Как называется конкретная утилита, реализующая make не имеет значения. В данном случае она называется mingw32-make.exe (кстати не знаю, что им мешало назвать ее make.exe).
Вот может быть полезно.

Добавлено через 7 минут
Цитата Сообщение от kravam Посмотреть сообщение
Во-во. Обычно, как правило...
это такое же устное правило, как например называть геттеры getField() (или field() в С++ больше принято). Если ты назовешь геттер pullField(), то это будет как минимум странно, но работать то он будет. Здесь тоже самое - обычно цель для сборки всего проекта программист (а скорее всего build master) называет all.
1
DrOffset
8137 / 4719 / 1153
Регистрация: 30.01.2014
Сообщений: 7,690
14.10.2014, 00:12 9
Цитата Сообщение от kravam Посмотреть сообщение
И что-то мне подсказывает, где-то в недрах mingw и должны быть описаны все эти clean, all и прочая, но где именно?
Там этого нет.

Цитата Сообщение от kravam Посмотреть сообщение
И пусть эти правила будут самые нестрогие! Но пусть они будут! А их нет...
Makefile - это программа, которая определяет как делать сборку. А утилита make - ее интерпретатор.
Какие цели, команды ты там в makefile напишешь - это твое дело. Разработчик сам определяет какие будут цели, и что эти цели будут выполнять. Синтаксис и общие правила составления makefile`ов для GNU make описаны здесь.

Добавлено через 2 минуты
Цитата Сообщение от Kastaneda Посмотреть сообщение
кстати не знаю, что им мешало назвать ее make.exe
Там есть определенные (небольшие) платформозависимые различия. Настоящий make идет в комплекте с MSYS.
1
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,531
14.10.2014, 02:14  [ТС] 10
DrOffset, а вы не знаете, где взять исходники текстового редактора, которые являются как бы подопытными для авторов книги? На сайте, который они указали

http://savannah.gnu.org/projects/make

их нет
0
DrOffset
8137 / 4719 / 1153
Регистрация: 30.01.2014
Сообщений: 7,690
14.10.2014, 12:02 11
kravam, Мне кажется это гипотетический пример. Т.е. реального кода за ним нет. Создай пустые файлы с указанными имeнами и компилируй. В конце концов для make не важно eсть в них реальный код или нет.
0
14.10.2014, 12:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2014, 12:02

cmd make
Я понимаю, что вопрос немного не в ту ветку, но он очень тесно связан с c++....

Альтернатива make
Много слышал про make в unix\linux. А есть что то подобное для windows? ...

Make и makefile
Здравствуйте. Меня интересует вопрос: что такое make, makefile, зачем это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru