Параметр debug_and_release не работал для linux

Я пытаюсь создать свой qt-плагин как в режиме отладки, так и в режиме выпуска под ОС Linux (Ubuntu 13.10), но мне кажется, что qmake игнорирует параметр CONFIG + = debug_and_release. Я также пытался использовать CONFIG + = build_all, но это не сработало. Когда я использую те же параметры в Windows, Qt генерирует два выходных файла (например, plugin.a и plugind.a), но в Linux я получаю только один из них. Когда я заставляю QtCreator построить мой проект в противоположном режиме (отладка вместо relesae), он заменяет уже сгенерированный целевой файл тем, который имеет то же имя. Где я ошибся?


person Mikhail Zimka    schedule 05.02.2014    source источник
comment
Вы пробовали позвонить make debug и make release?   -  person vahancho    schedule 05.02.2014
comment
Нет, я просто пытался настроить свой файл .pro   -  person Mikhail Zimka    schedule 05.02.2014
comment
Думаю, если вы попробуете это после вызова qmake, вы получите как отладочную, так и выпускную сборки.   -  person vahancho    schedule 05.02.2014
comment
Нет, к сожалению. Я использовал ту же конфигурацию в Windows и получаю как отладку, так и выпуск релиза, но не в Linux.   -  person Mikhail Zimka    schedule 05.02.2014
comment
Добавьте message($${CONFIG}) в конец вашего файла .pro, запустите qmake, затем скопируйте вывод message () сюда, чтобы мы могли видеть содержимое вашей переменной CONFIG.   -  person Bill    schedule 05.02.2014
comment
Вот он: Project MESSAGE: lex yacc warn_on debug uic resources qt warn_on release incremental link_prl gdb_dwarf_index shared def_files_disabled exceptions no_mocdepend release stl qt_no_framework plugin static build_all   -  person Mikhail Zimka    schedule 05.02.2014
comment
@MikhailZimka Я вижу release дважды, debug один раз, но не вижу debug_and_release. qmake не «игнорирует» debug_and_release, он просто не находит его среди значений переменной CONFIG!   -  person Bill    schedule 05.02.2014
comment
@Bill, это сообщение для опции build_all, вот сообщение для debug_and_release: Project MESSAGE: lex yacc warn_on debug uic resources qt warn_on release incremental link_prl gdb_dwarf_index shared def_files_disabled exceptions no_mocdepend release stl qt_no_framework unix release ReleaseBuild Release build_pass plugin static debug_and_release. Результат тот же   -  person Mikhail Zimka    schedule 05.02.2014
comment
@MikhailZimka В этом случае КОНФИГ правильный. Пожалуйста, отредактируйте свой вопрос и сообщите нам, что именно не работает. Чего вы ожидаете и что получаете взамен?   -  person Bill    schedule 05.02.2014


Ответы (1)


Возможно, проблема в том, что в вашем файле .pro вы должны были установить разные целевые каталоги или разные имена целевых файлов. Я не знаю почему, но похоже, что в Windows имена целевых файлов, сгенерированные в ваших файлах Makefile, разные, а в Linux они не отличаются. Вы можете попробовать изменить либо целевой каталог, либо имя целевого файла для отладочной сборки. Попробуйте либо

CONFIG(release, debug|release) {
    TARGET = plugin
} else {
    TARGET = plugind
}

or

CONFIG(release, debug|release) {
    DESTDIR = release
    OBJECTS_DIR = release/.obj
    MOC_DIR = release/.moc
    RCC_DIR = release/.rcc
    UI_DIR = release/.ui
} else {
    DESTDIR = debug
    OBJECTS_DIR = debug/.obj
    MOC_DIR = debug/.moc
    RCC_DIR = debug/.rcc
    UI_DIR = debug/.ui
}
person Bill    schedule 06.02.2014
comment
Нет, к сожалению, это не решает мою проблему. У меня действительно есть 2 OBJECTS_DIR / MOC_DIR / RCC_DIR (один для отладки и один для выпуска), но создается только один целевой файл. - person Mikhail Zimka; 06.02.2014
comment
@MikhailZimka Вы добавили и debug_and_release, и build_all в CONFIG одновременно? Если я добавлю только debug_and_release, тогда make построит проект только в режиме выпуска. Но если я добавлю debug_and_release и build_all, тогда make сначала построит мой крошечный образец проекта в release, затем в debug режиме, и будут созданы обе цели. - person Bill; 07.02.2014