Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение каталога сборки, запуск программы 
:(
    Опции темы
becks
Дата 12.7.2012, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.7.2010

Репутация: нет
Всего: нет



Добрый день, коллеги. Такой вопрос, хочу чтобы релизовый бинарник падал в необходимый мне каталог, а не в каталог по умолчанию, а остальные файлы - в дефолтовый. Для этого добавляю в файл проекта следующее:

Код

Release:DESTDIR = ../../SModules/ys
Release:OBJECTS_DIR = release/.obj
Release:MOC_DIR = release/.moc

Debug:DESTDIR = debug
Debug:OBJECTS_DIR = debug/.obj
Debug:MOC_DIR = debug/.moc


Размещение происходит идеально, все кидает куда нужно. Но только я захотел запустить проект на выполнение в Qt Creator, сразу получил:

Код

Не удалось запустить программу. Путь или права недопустимы?
C:......\ys\release\ys.exe завершился с кодом -1
Запускается C:......\ys\release\ys.exe...


Оно вроде и понятно, среда пытается запустить программу по дефолтовому пути. Самое занятное, что среда не дает изменить путь в exe в Проекты-Настройки запуска-программа. Для поля закрыто редактирование.
Подскажите, пожалуйста, как и что поменять, чтобы можно было запустить экзешник из среды, не из дефолтового каталога? Спасибо
PM MAIL   Вверх
math64
Дата 12.7.2012, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



я использую не отностельные пути, а использую макрос $$PWD для каталога проекта - все работает правильно.
отладочную версию складываю в тот же каталог, но добавляю d к имени файла. Так проще находить файлы конфигурации, бази данных, плагины и т.д.
PM   Вверх
becks
Дата 13.7.2012, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.7.2010

Репутация: нет
Всего: нет



Я все равно не очень понял, допустим у меня такая структура:

Projects
|
|_Project_1
|                    |
|                    |_*cpp , *h
|                    |
|                    |_release
|                    |            |
|                    |            |_ .moc, .obj
|                    |
|                    |_debug
|                                |
|                                |_ .moc, .obj
|
|
|_Project_2
|                    |
|                    |_*cpp , *h
|                    |
|                    |_release
|                    |            |
|                    |            |_ .moc, .obj
|                    |
|                    |_debug
|                                |
|                                |_ .moc, .obj
|
|
|_Global_Project
                    |
                    |_Project_1
                    |               |
                    |               |_ Project_1.exe
                    |
                    |_Project_2
                    |               |
                    |               |_ Project_2.exe
                    |
                    |_*cpp , *h
                    |
                    |_release
                    |            |
                    |            |_ .moc, .obj, Global_Project.exe
                    |
                    |_debug
                                |
                                |_ .moc, .obj, Global_Project.exe


И я добиваюсь такого размещения благодаря pro файлу указанному выше, но вот программа никак не хочет запускаться из среды.

Как в данном случае будет выглядеть .pro относительно моего вопроса, пусть и с макросами $$PWD для проекта Project_1? И еще подскажите в настройках запуска проекта есть поле "Рабочий каталог", я наивно полагал, что $$PWD берет значение оттуда. $$PWD - это каталог в котором находится pro файл данного проекта, всегда?

Это сообщение отредактировал(а) becks - 13.7.2012, 09:38
PM MAIL   Вверх
math64
Дата 13.7.2012, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Вот как в моём файле проекта:
Код

CONFIG(debug, debug|release) {
TARGET = MyAppD
} else {
TARGET = MyApp
}
DESTDIR = $$PWD/../bin
release:OBJ_DIR = $$OUT_PWD/release/obj
release:MOC_DIR = $$OUT_PWD/release/moc
release:RCC_DIR = $$OUT_PWD/release/rcc
release:UI_DIR = $$OUT_PWD/release/ui
debug:OBJ_DIR = $$OUT_PWD/debug/obj
debug:MOC_DIR = $$OUT_PWD/debug/moc
debug:RCC_DIR = $$OUT_PWD/debug/rcc
debug:UI_DIR = $$OUT_PWD/debug/ui

$$PWD - каталог с файлом проекта
$$OUT_PWD - каталог, куда QtCreator создаёт makefile. При обычном запуске qmake то же самое, что и $$PWD

Добавлено через 4 минуты и 35 секунд
кстати, у тебя Debug, Release. Нужно debug, release
PM   Вверх
spyswamp
Дата 13.7.2012, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



Оффтоп: Кстати, у $$PWD обнаружил дурную особенность. Он даже под Windows возвращает в пути "/" вместо "\". С этим могут быть проблемы.


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
math64
Дата 13.7.2012, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Ну давал бы $$PWD путь с '\\' - предлагаешь мой проект переписать так:
Код

CONFIG(debug, debug|release) {
TARGET = MyAppD
} else {
TARGET = MyApp
}
unix:DESTDIR = $$PWD/../bin
unix:release:OBJ_DIR = $$OUT_PWD/release/obj
unix:release:MOC_DIR = $$OUT_PWD/release/moc
unix:release:RCC_DIR = $$OUT_PWD/release/rcc
unix:release:UI_DIR = $$OUT_PWD/release/ui
unix:debug:OBJ_DIR = $$OUT_PWD/debug/obj
unix:debug:MOC_DIR = $$OUT_PWD/debug/moc
unix:debug:RCC_DIR = $$OUT_PWD/debug/rcc
unix:debug:UI_DIR = $$OUT_PWD/debug/ui
win32:DESTDIR = $$PWD\\..\\bin
win32:release:OBJ_DIR = $$OUT_PWD\\release\\obj
win32:release:MOC_DIR = $$OUT_PWD\\release\\moc
win32:release:RCC_DIR = $$OUT_PWD\\release\\rcc
win32:release:UI_DIR = $$OUT_PWD\\release\\ui
win32:debug:OBJ_DIR = $$OUT_PWD\\debug\\obj
win32:debug:MOC_DIR = $$OUT_PWD\\debug\\moc
win32:debug:RCC_DIR = $$OUT_PWD\\debug\\rcc
win32:debug:UI_DIR = $$OUT_PWD\\debug\\ui

чтобы везде были правильные слеши. Аналогично в INCLUDEPATH и т.д.
В большинстве случаев в windows это без разницы, а  проект усложняется.


Это сообщение отредактировал(а) math64 - 13.7.2012, 21:58
PM   Вверх
spyswamp
Дата 25.7.2012, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



Это я к тому, что win32:DESTDIR = $$PWD\\..\\bin развернется в blabla/ololo/kukuku\\..\\bin. Команды copy и xcopy виндовые не схавают, например, твои "/". Хотя, я это просто обошел: написал мелкий cmd-файл, чтобы он слеши менял, а в *.pri спокойно использовал $$PWD.

Код

@echo off
set src=%1
set dst=%2
set src=%src:/=\%
set dst=%dst:/=\%
xcopy /Y %src% %dst%


Добавлено через 1 минуту и 23 секунды
Тогда сама команда оборачивается так:
Код

win32
{
    ...
    QMAKE_POST_LINK += $$quote( $$PWD/local_deploy.cmd $$PWD/Shared/Models/preprocess.xsl ./debug & )
    ...
}



--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
math64
Дата 25.7.2012, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



А я к тому, что твоё blabla/ololo/kukuku\\..\\bin линукс не схавает. Поэтому нужно писать $$PWD/../bin, а тогда в твоём c:\\blabla\\ololo\\kukuku/../bin толку тоже не будет - нужно оставшиеся / превращать в \\.
А для этого у qmake есть $$replace(string, /, \\) - её всё равно применять при любом поведении $$PWD


PM   Вверх
spyswamp
Дата 26.7.2012, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



math64, о, про $$replace() не знал. smile Конечно, не схавает. Поэтому если есть какой-то деплой, то не всегда получится ограничиться универсальностью - это был основной тезис оффтопа. smile


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
math64
Дата 26.7.2012, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Про $$quote() ведь знал! А $$replace() следующая за ней в хелпе.
PM   Вверх
spyswamp
Дата 26.7.2012, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



math64, ты меня затроллил!  smile  smile 


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
bsa
Дата 28.7.2012, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Цитата(becks @  12.7.2012,  18:45 Найти цитируемый пост)
Подскажите, пожалуйста, как и что поменять, чтобы можно было запустить экзешник из среды, не из дефолтового каталога?

Зайди в режим проект, открой вкладку "Запуск" (или "конфигурация запуска") и настрой пути к исполняемому файлу. Файл pro тут не причем.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1217 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.