![]() |
|
|
![]()
|
|
| DTF |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 4.9.2007 Репутация: нет Всего: нет |
Здравствуйте.
Есть проект на C++, в папке проекта есть каталоги cpp и h, в которых хранятся cpp- и h-файла соответственно. При сборке должен создаваться каталог obj, куда будут сохраняться объектные файлы, причем для каждого cpp-файла соответствующий объектный файл должен иметь такое же имя (ну, не считая изменившегося расширения). Т.е. для файла cpp/file.cpp должен создаваться объектный файл obj/file.obj. Проблема в том, что, например, майкросовтовский cl.exe не имеет возможности (по крайней мере, я не нашел) записывать все получающиеся временные файлы в указанную директорию. Ему нужно для каждого входного файла указать точное имя выходного. Конечно, можно для каждого файла сделать отдельное правило сборки, но это неудобно, конечно же. Написать bat-файл для сборки, который для каждого файла сформирует соответствующую команду тоже можно, но и этот вариант мне не нравится Поэтому прошу совета P.S. Это вопрос для самообразования, в реальной жизни он вряд ли будет использоваться в таком виде, так что не нужно спрашивать "зачем тебе это надо?". P.P.S. если кто-нибудь расскажет, как решить эту задачу средствами CMake, то тоже буду очень благодарен, т.к. с этой системой сборки практически не знаком. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: нет Всего: 223 |
А по моему основная проблема в том, что 'майкросовтовский cl.exe' не работает пол Unix/Linux, ы? gnu mnake:
Добавлено через 2 минуты и 5 секунд Еще смотри на vpath в gnu make Это сообщение отредактировал(а) xvr - 20.12.2010, 15:15 |
|||
|
||||
| DTF |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 4.9.2007 Репутация: нет Всего: нет |
А причем тут это? У майкрософта есть nmake, который умеет читать make-файлы под Windows и вызывать cl в Windows. За пример спасибо, буду пробовать и разбираться. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: нет Всего: 223 |
||||
|
||||
| DTF |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 4.9.2007 Репутация: нет Всего: нет |
А, ну да, протупил :(
Написал не в тот раздел... Модеры, если возможно - перенесите плс в кроссплатформенное программирование Это сообщение отредактировал(а) DTF - 20.12.2010, 17:25 |
|||
|
||||
| DTF |
|
||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 4.9.2007 Репутация: нет Всего: нет |
Приведенное решение не работает :(
nmake ругается на строку
Сообщение об ошибке следующее:
Ссылается на первую строку потому, что я для чистоты эксперимента создал вот такое Makefile:
Я поискал описание этой ошибки в гугле, нашел немного:
Но в данном случае имя переменной есть, оно используется далее, каталог cpp тоже не пуст... Я попытался проверить, находит ли функция wildcards файлы - написал такой Makefile:
на него получил ошибку
не могу понять, в чем дело :( |
||||||||||||
|
|||||||||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: нет Всего: 223 |
||||
|
||||
| DTF |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 4.9.2007 Репутация: нет Всего: нет |
Нашел тему на stackoverflow с описанием похожей проблемы.
Насколько я понял (а понимаю я по-английски плохо Попробую на GNU make. P.S. Если кто-то сможет понять и рассказать, что написано по приведенной мной ссылке, то буду благодарен xvr, опередили Это сообщение отредактировал(а) DTF - 20.12.2010, 23:18 |
|||
|
||||
| DTF |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 4.9.2007 Репутация: нет Всего: нет |
А если немного изменить задачу - пусть в каталоге cpp лежат не только файлы, но и другие каталоги,
в которых тоже лежат *.cpp-файлы? Причем структура каталогов неизвестна на момент написание Makefile. Возможно ли модифицировать шаблон $(wildcard cpp/*.cpp), чтобы он находил cpp-файлы в том числе и в поддиректориях? (естественно, хочется сделать это средствами make, без использования команд оболочки) Это сообщение отредактировал(а) DTF - 21.12.2010, 00:30 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: нет Всего: 223 |
||||
|
||||
| DTF |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 4.9.2007 Репутация: нет Всего: нет |
Я читал. Но переварить весь его объем пока не в состоянии.
А спрашивал именно
Это сообщение отредактировал(а) DTF - 21.12.2010, 12:35 |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: нет Всего: 223 |
Похоже нельзя |
||||
|
|||||
| DTF |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 4.9.2007 Репутация: нет Всего: нет |
Жаль.
Но все равно, спасибо, xvr, Вы очень помогли Это сообщение отредактировал(а) DTF - 24.12.2010, 17:35 |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |