Russian Qt Forum
Ноябрь 22, 2024, 18:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QBS и отладочная информация PDB  (Прочитано 3548 раз)
MrDron
Гость
« : Февраль 28, 2020, 14:45 »

Здравствуйте. Под виндой в релизе делаю генерацию отладочной информации в PDB файлы. Они генерятся в каталоге сборки. Компилятор msvc

Код:
cpp.linkerFlags: {
    var flags = base;
    if (qbs.buildVariant == "release" && qbs.toolchain.contains("msvc")) {
        flags.push("/DEBUG");
        flags.push("/PDBALTPATH:pdb/%_PDB%");
    }
    return flags;
}

А как бы мне теперь эти сгенерированые файлы положить в каталог "pdb" приложения?

Пробовал через Rule и FileTagger, но FileTagger ищет по шаблону только в папке с исходниками, а не в каталоге сборки.
Код:
FileTagger {
    patterns: [ "*.pdb" ]
    fileTags: [ "pdb_files" ]
}

Может кто нибудь подсказать? Спасибо!
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Февраль 28, 2020, 17:27 »


Код:
cpp.linkerFlags: {
    var flags = base;
    if (qbs.buildVariant == "release" && qbs.toolchain.contains("msvc")) {
        flags.push("/DEBUG");
        flags.push("/PDBALTPATH:pdb/%_PDB%");
    }
    return flags;
}

Это не совсем правильно, правильно cpp.debugInformation:true и cpp.separateDebugInformation:true
По сути "дебаг" это сборка с дебаг инфо и без оптимизаций:
Код:
    property bool debugInformation: (buildVariant == "debug")
    property string optimization: (buildVariant == "debug" ? "none" : "fast")

Отвечая на основной вопрос, MSVC модуль назначает отладочным символам тэги "debuginfo_app" (для бинарника), "debuginfo_dll" (для .dll) и "debuginfo_cl" (для статических либ). Ставить надо эти тэги, вот примеры из самой qbs:

Код:
    Group {
        fileTagsFilter: product.type
            .concat(qbs.buildVariant === "debug" ? ["debuginfo_app"] : [])
        qbs.install: true
        qbs.installDir: targetInstallDir
        qbs.installSourceBase: buildDirectory
    }


Код:
    Group {
        fileTagsFilter: [isForDarwin ? "loadablemodule" : "dynamiclibrary"]
            .concat(qbs.buildVariant === "debug"
        ? [isForDarwin ? "debuginfo_loadablemodule" : "debuginfo_dll"] : [])
        qbs.install: true
        qbs.installDir: targetInstallDir
        qbs.installSourceBase: buildDirectory
    }

Да, и стоит упомянуть очевидное - если вы руками передаете флаги компилятору то никто артефакты с указанными тэгами не создаст =)

Код:
            if (product.cpp.debugInformation && product.cpp.separateDebugInformation) {
                artifacts.push({
                    fileTags: ["debuginfo_app"],
                    filePath: ...
                });
            }

« Последнее редактирование: Февраль 28, 2020, 17:38 от Авварон » Записан
MrDron
Гость
« Ответ #2 : Март 03, 2020, 12:10 »

Спасибо большое! Работает.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.