Как изменить выходной каталог Debug / Release с помощью файла qmake .pro.Кросс-plataform - PullRequest
1 голос
/ 29 апреля 2011

Я прочитал весь пост об этом, и ни одно из решений не работает в Windows и Linux. Мое текущее решение работает довольно хорошо в Windows, создавая, если не существует, соответствующий каталог для отладки или выпуска.

Я хочу создать все свои объектные файлы (* .o) внутри одной из этих папок. В Windows я добился этого в Linux, моя переменная DESTDIR пуста. = |

TEMPLATE = app
TARGET = 
DEPENDPATH += .
INCLUDEPATH += .

# Input
HEADERS += Config.h \
           keyboard.h \
           keyboardgui.h \
           keyboardkey.h \
           Log.h \
           main.h \
           mainwindow.h \
           Settings.h
FORMS += mainwindow.ui
SOURCES += Config.cpp \
           keyboard.cpp \
           keyboardgui.cpp \
           keyboardkey.cpp \
           Log.cpp \
           main.cpp \
           mainwindow.cpp
RESOURCES += Resources.qrc

OTHER_FILES += \
    default_layout.kl


# se for Windows
win32 {
# inclui a lib para acessar o DMI
LIBS += -lqaxcontainer
}

# Habilita a opcao de copia de diretorios
CONFIG += copy_dir_files

Debug:DESTDIR = debug
Release:DESTDIR = release

# copia a pasta configuracao para o diretorio de saida
win32 {
 QMAKE_POST_LINK +=  copy /Y default_layout.kl $$DESTDIR
}
else {
 QMAKE_POST_LINK +=  cp -a default_layout.kl $$DESTDIR 
}

Я пытался использовать переменную INSTALL, но безуспешно. Каталог отладки создается и все объектные файлы помещаются туда, но когда я изменил режим компиляции на RELEASE, файлы объектов продолжают перемещаться в каталог отладки, а каталог RELEASE не создается (я попытался запустить qmake снова) , В обеих конфигурациях мои файлы (default_layout и layout) не копируются в выходной каталог.

# Habilita a opcao de copia de diretorios
CONFIG += copy_dir_files

release:DESTDIR = release
release:OBJECTS_DIR = release/
release:MOC_DIR = release/
release:RCC_DIR = release/
release:UI_DIR = release/

debug:DESTDIR = debug
debug:OBJECTS_DIR = debug/
debug:MOC_DIR = debug/
debug:RCC_DIR = debug/
debug:UI_DIR = debug/

INSTALLS += config_files
config_files.path = $$DESTDIR
config_files.filename = default_layout.kl
config_files.filename += layout.kl

ТНХ!

1 Ответ

3 голосов
/ 02 мая 2011

Я думаю, причина того, что это работает в Windows, а не в Linux, в том, что вы использовали заглавные буквы «Debug» и «Release».Все примеры, которые я нашел, содержат их в нижнем регистре (см. Второй пример в этом разделе на странице документа qmake .)

Другая вещь, которую я задаю вопрос, - это использование DESTDIRS.DESTDIRS сообщает qmake, куда вы хотите поместить ЦЕЛЬ.Если вы хотите напрямую контролировать, куда помещаются только объектные файлы, вы должны использовать OBJECT_DIRS .

Лично я использую ключевое слово qmake INSTALLS , чтобы копировать дополнительные файлы, гдеим нужно идти.Это означает выполнение как make, так и make install, но при этом генерируется более зависимый от платформы код.

Если я предполагаю, что вы хотите TARGET и объекты в 'debug' или 'release',Я бы сделал это так:

# Habilita a opcao de copia de diretorios
debug {
    DESTDIR = debug
    OBJ_DIR = debug
}
release
{
    DESTDIR = release
    OBJ_DIR = release
}

# copia a pasta configuracao para o diretorio de saida
config_files.path = $$DESTDIR
config_files.files = default_layout.kl
INSTALLS += config_files

Если вы работаете с QtCreator, вы можете добавить шаг make install в настройки здания, выбрав значок «Проекты» на левой панели инструментов.Затем выберите «Add Build Step», «Make» и установите для «Make arguments» значение install.Вам придется делать это для каждой конфигурации сборки.

...