![]() |
|
|
![]()
|
|
| kamre |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 2 Всего: 13 |
Вообщем имеется у меня проект, типа такого:
При работе с cmake у меня CMakeLists.txt лежит в директории Project, а сборка разных конфигураций делается в Project/build_<config>. Написал аналогичный файл Project/SConstruct. Но никак не пойму, как мне делать сборки в Project/build. Сейчас у меня все объектники после компиляции появляются там же, где и исходники, а все бинарники прям в Project. В документации что-то говорится про VariantDir, но у меня не получается с ней ничего. Что там передается вторым аргументом? Подскажите, пожалуйста, как делать сборку в отдельной директории, чтобы в дереве исходников ничего лишнего не появлялось. И еще один небольшой вопрос по логу сборки. Сейчас когда запускаю scons, то он вываливает запуск компилятора и линкера со всеми параметрами, которые им передаются. Чаще всего это лишняя информация (когда процесс сборки уже работает), а интересно видеть только то, какой сейчас файл компилируется и сколько еще осталось в процентах. Как это можно настроить в scons? P.S. Еще нашел waf, это вроде как форк scons. Чем он отличается? Может в нем все это проще делается? |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 2 Всего: 154 |
если уже все собирается в cmake, зачем еще и SCons? |
|||
|
||||
| kamre |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 2 Всего: 13 |
Ну на самом деле изначально было вообще все исключительно на проектах под MSVC. На CMake я просто по быстрому переписал, уже работает почти все как надо (под mingw собирается, под линуксом тоже). Т.к. по быстрому, то не очень аккуратно и правильно. Да и пришлось ставить не стабильный cmake, т.к. некоторые фичи нужны были. Вот и думаю теперь, как это все лучше правильно сделать. Дальше разбираться с CMake или же разобраться с чем-то другим. Вроде про Scons много хорошего пишут, решил и его посмотреть. С другой стороны, те же KDE в итоге от него отказались и перешли на CMake. Так что не все так однозначно получается |
|||
|
||||
| nickless |
|
||||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 13 Всего: 181 |
ИМХО лучше всего напиши отдельные SConscript файлы для каждой директории, а в корне вызывай их с указанием build directory
или
(в новых версиях поменялось название) Читать тут -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
||||
|
|||||
| kamre |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 2 Всего: 13 |
Переделал, значит, через SConsript для каждого проекта:
а сами SConsctipt примерно так выглядят:
и
Вопросы: - при линковке выдает ошибку "Слишком длинная строка символов", что делать? - зависимости между разными target SCons мне сам определит, или надо смому? как самому, если надо? - и все таки на счет лога компиляции, умеет ли показывать прогресс в процентах и текущий компилируемый файл? |
||||||
|
|||||||
| nickless |
|
||||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 13 Всего: 181 |
Для начала найти где она слишком длинная, там видно будет. По идее он для этого и предназначен, но если что можно и помочь, там есть
ИМХО нет, этим cmake мне нравится больше
-------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
||||
|
|||||
| kamre |
|
||||||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 2 Всего: 13 |
Длинная строка получается при линковке: g++ -shared -o ... <many-many object files>
На небольших примерах вроде пока он сам все разруливает. А если что, то target придется из SConscript возвращать и Depends добавлять?
Плохо, хотя и не критично. MSVC тоже при сборке не показывает.
Спасибо за подсказку, до этого я еще не успел тогда в мануале прочитать. Только все равно у меня вылазит небольшая проблема. При линковке shared library вываливает всю строку, хотя стоит:
выводит:
почему не просто "Linking shared library build/hello.dll"? |
||||||||||||||||
|
|||||||||||||||||
| kamre |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 2 Всего: 13 |
Нашел на scons wiki workaround: http://www.scons.org/wiki/LongCmdLinesOnWin32 Хотя там же пишут, что win32 api не позволяет передать строку длиннее 32766. Но мне пока хватает... Пришлось доставлять pywin32 и добавлять в SConstruct:
Придется такое всегда с собой таскать в скрипте сборки? P.S. В CMake как-то уже само по себе обходилось это ограничение и ничего дополнительно не надо было делать... |
||||
|
|||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Может waf? Добавлено через 13 секунд Всмысле попробовать |
|||
|
||||
| kamre |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 2 Всего: 13 |
Еще заметил такой косяк: после первой сборки, если еще раз запускаю scons, то он опять часть targets перелинковывает. Зачем он это делает? Есле еще раз запускаю, то больше не делает этого.
И еще, почему на уже собраном проекте, т.е. когда нужно просто показать
P.S. похоже придется вернуться на CMake и уже с ним доразбираться... А то получается, что scons без костылей в скрипте сборки линковать не умеет, тормозит, проценты не показывает... |
||||
|
|||||
| nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 13 Всего: 181 |
Где добавлять всё равно, надо только чтобы были видны и то и другое, если это файлы, то будет достаточно пути к ним. А тот env , в котором заменили строку линковки виден в том файле, где происходит сама линковка? Раз это ограничение scons-а, то скорее всего да. Я не сталкивался, не знаю Всмысле мне? Мне не надо, я на CMake перехожу Вроде где-то на сяте у них было написано, что они в первую очередь ориентируются на правильную сборку, а не на скорость, по этому проверяют зависимости итд... Это кому как больше нравится. Вообще ИМХО scons - интересная штука, для него можно написать всё что угодно (python на порядок удобнее по сравнению с кхм.. странным "языком" cmake), но к сожалению этим слишком часто приходится заниматься. -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Всмысле топикстартеру Это сообщение отредактировал(а) Любитель - 3.6.2008, 12:15 |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, 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. |