Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kravam
быдлокодер
1704 / 891 / 45
Регистрация: 04.06.2008
Сообщений: 5,508
#1

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

13.10.2014, 20:46. Просмотров 1369. Ответов 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 (вернее, его разновидность mingw32-make.exe) принимает неизвестные параметры? (C++):

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

Параметры команды make - C++
Как правильно написать несколько параметров для команды make? Не получается #include &lt;iostream&gt; #include &lt;stdlib.h&gt; using...

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

Почему шаблонный параметр-шаблон не принимает другие параметры шаблона - C++
Т.е. нельзя вместо template &lt;typename T, template &lt;typename _Ty, class _Aloc = allocator&lt;_Ty&gt; &gt; class CONT = vector&gt; class...

cmd make - C++
Я понимаю, что вопрос немного не в ту ветку, но он очень тесно связан с c++. Скачивал уже не одну библиотеку, содержащую Makefile. Ни сам...

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

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

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

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

Добавлено через 2 минуты
Цитата Сообщение от retmas Посмотреть сообщение
кстати эти цели не есть встроенные, а описанные в makefile'е. залезь в него и увидишь их описание. а называться они могут как угодно. это просто одни из "принятых" названий
Ну допустим. Сейчас мне IDE сгенерила makefile а если я буду его составлять сам? Мне откуда их брать, чтобы туда написать? Например, параметры командной строки я знаю для g++, где брать. А где брать цели для создания makefile САМОМУ- неизвестно.
0
Kastaneda
Jesus loves me
Эксперт С++
4728 / 2932 / 242
Регистрация: 12.12.2009
Сообщений: 7,442
Записей в блоге: 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
быдлокодер
1704 / 891 / 45
Регистрация: 04.06.2008
Сообщений: 5,508
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
Эксперт С++
4728 / 2932 / 242
Регистрация: 12.12.2009
Сообщений: 7,442
Записей в блоге: 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
7506 / 4502 / 1023
Регистрация: 30.01.2014
Сообщений: 7,362
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
быдлокодер
1704 / 891 / 45
Регистрация: 04.06.2008
Сообщений: 5,508
14.10.2014, 02:14  [ТС] #10
DrOffset, а вы не знаете, где взять исходники текстового редактора, которые являются как бы подопытными для авторов книги? На сайте, который они указали

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

их нет
0
DrOffset
7506 / 4502 / 1023
Регистрация: 30.01.2014
Сообщений: 7,362
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
Привет! Вот еще темы с ответами:

Альтернатива make - C++
Много слышал про make в unix\linux. А есть что то подобное для windows? Добавлено через 7 минут Совместимое с mingw

Функция принимает в параметры массив и сжимает его - C++
Написать функцию которая принимает в параметры массива и сжимает его путем сложения разных соседних местами, заполнив свободные места...

Чем плох make? - C++
Дали написать реферат по make файлам и соответственно указать его минусы, а значит сравнить его с такими утилитами как CMake, но для меня...

Зацикливается make (makefile) - C++
Решил освоить makefile Создаю простейшую программу, состоящую из единственного файла main.cpp Создаю makefile (makefile): all: ...


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

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

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