| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Помогите написать Makefile |
| Автор: DTF 20.12.2010, 13:07 |
| Здравствуйте. Есть проект на C++, в папке проекта есть каталоги cpp и h, в которых хранятся cpp- и h-файла соответственно. При сборке должен создаваться каталог obj, куда будут сохраняться объектные файлы, причем для каждого cpp-файла соответствующий объектный файл должен иметь такое же имя (ну, не считая изменившегося расширения). Т.е. для файла cpp/file.cpp должен создаваться объектный файл obj/file.obj. Проблема в том, что, например, майкросовтовский cl.exe не имеет возможности (по крайней мере, я не нашел) записывать все получающиеся временные файлы в указанную директорию. Ему нужно для каждого входного файла указать точное имя выходного. Конечно, можно для каждого файла сделать отдельное правило сборки, но это неудобно, конечно же. Написать bat-файл для сборки, который для каждого файла сформирует соответствующую команду тоже можно, но и этот вариант мне не нравится Поэтому прошу совета P.S. Это вопрос для самообразования, в реальной жизни он вряд ли будет использоваться в таком виде, так что не нужно спрашивать "зачем тебе это надо?". P.P.S. если кто-нибудь расскажет, как решить эту задачу средствами CMake, то тоже буду очень благодарен, т.к. с этой системой сборки практически не знаком. |
| Автор: DTF 20.12.2010, 15:41 | ||
А причем тут это? У майкрософта есть nmake, который умеет читать make-файлы под Windows и вызывать cl в Windows. За пример спасибо, буду пробовать и разбираться. |
| Автор: xvr 20.12.2010, 16:27 |
При том, что раздел называется 'С/С++: Программирование под Unix/Linux' Добавлено через 46 секунд Или вы собрались nmake с cl вкупе из под Wine вызывать? |
| Автор: DTF 20.12.2010, 17:23 |
| А, ну да, протупил :( Написал не в тот раздел... Модеры, если возможно - перенесите плс в кроссплатформенное программирование |
| Автор: DTF 20.12.2010, 23:01 | ||||||||||||
| Приведенное решение не работает :( nmake ругается на строку
Сообщение об ошибке следующее:
Ссылается на первую строку потому, что я для чистоты эксперимента создал вот такое Makefile:
Я поискал описание этой ошибки в гугле, нашел немного:
Но в данном случае имя переменной есть, оно используется далее, каталог cpp тоже не пуст... Я попытался проверить, находит ли функция wildcards файлы - написал такой Makefile:
на него получил ошибку
не могу понять, в чем дело :( |
| Автор: xvr 20.12.2010, 23:17 |
| Это для gnu make'а. Он гораздо более продвинутый, чем nmake (последний по уровню развития находится где то недалеко от самого первого оригинального make'а, т.е. на уровне динозавров |
| Автор: DTF 20.12.2010, 23:18 |
| Нашел тему на http://stackoverflow.com/questions/167004/using-nmake-with-wildcards-in-the-makefile/640880#640880 с описанием похожей проблемы. Насколько я понял (а понимаю я по-английски плохо Попробую на GNU make. P.S. Если кто-то сможет понять и рассказать, что написано по приведенной мной ссылке, то буду благодарен xvr, опередили |
| Автор: DTF 21.12.2010, 00:24 |
| А если немного изменить задачу - пусть в каталоге cpp лежат не только файлы, но и другие каталоги, в которых тоже лежат *.cpp-файлы? Причем структура каталогов неизвестна на момент написание Makefile. Возможно ли модифицировать шаблон $(wildcard cpp/*.cpp), чтобы он находил cpp-файлы в том числе и в поддиректориях? (естественно, хочется сделать это средствами make, без использования команд оболочки) |
| Автор: xvr 21.12.2010, 10:32 | ||||
|
| Автор: DTF 21.12.2010, 12:34 | ||
| Я читал. Но переварить весь его объем пока не в состоянии. А спрашивал именно
|
| Автор: xvr 21.12.2010, 12:51 | ||||
Похоже нельзя |
| Автор: DTF 24.12.2010, 17:34 |
| Жаль. Но все равно, спасибо, xvr, Вы очень помогли |