crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Построение и установка в режимах Debug и Release, Не получается :(
igor_bogomolov
  опции профиля:
сообщение 5.10.2009, 23:37
Сообщение #1


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Всем привет.

По описанию создаю такой блок в .pro- файле
Раскрывающийся текст
TARGET   = k095_client
DESTDIR  = $$PWD/bin

CONFIG += debug_and_release
CONFIG += build_all
CONFIG(debug, debug|release) {
    DEFINES += "APP_TITLE=\\\"k095_client_debug\\\""
    DESTDIR = $$join(DESTDIR,,,/debug)
    unix:   TARGET = $$join(TARGET,,,_debug)
    win32:  TARGET = $$join(TARGET,,d)
    message(Debug build.   $$TARGET install in \"$$DESTDIR\")
} else {
    DEFINES += "APP_TITLE=\\\"k095_client\\\""
    DESTDIR = $$join(DESTDIR,,,/release)
    message(Release build.   $$TARGET install in \"$$DESTDIR\")
}


После компиляции, на самом деле, получаю k095_client и k095_client_debug в соответствующих директориях. Беда только в том, что в реальности это два совершенно одинаковых файла, собранных в релизе.

Как собрать одновременно отладочную и релизную сборки? И возможно ли это сделать в QtCreatore, что бы он не навязывал собственных правил?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 6.10.2009, 0:15
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Насчет QtCreator'а ничего сказать не могу, а в консоли я собирал так:

mingw32-make all
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.10.2009, 4:22
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


igor_bogomolov, у тебя объектные файлы сначала собираются отладочные, затем на основе них создаётся бинарь. При сборке релиза, т.к. объектники уже есть из них собирается бинарь (опять такой же только имя другое)

Я так поступаю, написал себе стандартный pri-файл (обрати внимание на OBJECTS_DIR)
stdconfig.pri
######################################################################
# Temporary directory
######################################################################
isEmpty(TMPDIR){
    TMPDIR = ./tmp
    message(Auto set TMPDIR = $${TMPDIR})
}


######################################################################
isEmpty(DESTDIR){
    DESTDIR = ./
    contains(TEMPLATE, lib){
        DESTDIR = ./lib
    }else{
        DESTDIR = ./build
    }
    message(Auto set DESTDIR = $${DESTDIR})
}

TMP_DIR = $$TMPDIR

CONFIG (debug, debug|release) {
    contains(TEMPLATE, lib){
        TARGET = $$qtLibraryTarget($$TARGET)
    }else{
        TARGET      = $$join(TARGET,,,.d)
    }
    OBJECTS_DIR = $${TMP_DIR}/debug
    CONFIG        += console
}else{
    OBJECTS_DIR = $${TMP_DIR}/release
}

UI_DIR      = $${TMP_DIR}/uic
MOC_DIR     = $${TMP_DIR}/moc
RCC_DIR        = $${TMP_DIR}/rcc

contains(CONFIG, debug_and_release) {
    CONFIG        += build_all
}


contains(DEBUGCONFIG, true){
    message(CONFIG = $${CONFIG})
    message(DESTDIR=$${DESTDIR})
    message(TARGET=$${TARGET})
    message(TMPDIR=$${TMPDIR})
    message(TMP_DIR=$${TMP_DIR})
    message(OBJECTS_DIR=$${OBJECTS_DIR})
    message(INCLUDEPATH = $${INCLUDEPATH})
    message(QMAKE_LIBDIR = $${QMAKE_LIBDIR})
    message(LIBS = $${LIBS})    
    message(===================================)
}

contains(HARDCODED, target) {
    TARGETTMP = '\\"$${TARGET}\\"'
    DEFINES  += TARGET=\"$${TARGETTMP}\"
}
Использую так
myproject.pro
TARGET = tomsk
TEMPLATE = app
DESTDIR = ..
TMPDIR = ../tmp
#DEBUGCONFIG = true
#HARDCODED = target

CONFIG += debug_and_release
#CONFIG += console

#=========== Define ================
#unix:DEFINES   =
#win32:DEFINES  =


#=========== Files =================
HEADERS           +=    mainwindow.h

SOURCES           +=    mainwindow.cpp

SOURCES           +=    main.cpp


#========= Dependency ==============
DEPENDPATH       +=    .
INCLUDEPATH       +=    .

#        --- Qt ---
#QT += sql
#QT -= gui

#      --- External ---
#include($$(LIBS)/qextserialport_1.1/serialport.pri)


#======== Translation ===============
#TRANSLATIONS    = app_en.ts
#CODECFORTR      = UTF-8


# ======== Convenient config ===============
include($$(LIBS)\myPri\stdconfig.pri)
здесь:
LIBS - переменная окружения содержащая путь, где лежат всякие либы и pri-файл
DEBUGCONFIG - позволяет управлять отладкой pro-файлов (см. pri-файл)
HARDCODED - позволяет зашить в бинарь всякие штуки (сейчас только имя целя, но хотел ещё и путь к переводам и ...)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.6.2013, 20:14
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Последнее обновление
stdconfig.pri
######################################################################
# HowTo USE
######################################################################
# In pro-file:
# TEMPDIR - set Temporary Directory (optionale)
# DESTDIR - set Destination Directory (optionale)
# TRDIR - set Translations Directory (optionale)
#
# DEBUGCONFIG = false  - off pro-file debuging  (optionale)
#
# HARDCODED += <name> - hardcoded (defined) <name> in DEFINE  (optionale)
#    here is <name> suported:
#        target            - #define TARGET = $${TARGET}
#        translationdir    - #define TRDIR = $${TRDIR}
#        version         - #define VERSION = $${VERSION}
#
# include($$(LIBS)/MyPri/stdconfig.pri)
#
#
######################################################################



#=========== Temporary directory ========
isEmpty(TEMPDIR){
    isEmpty(TMPDIR){
        TMPDIR = ./tmp
        message(Auto set TEMPDIR = $${TMPDIR})
    }
}else{
    TMPDIR = $$TEMPDIR
}

TMP_DIR = $$TMPDIR

#=========== Destination directory ========
isEmpty(DESTDIR){
    DESTDIR = ./
    contains(TEMPLATE, lib){
        DESTDIR = ./lib
    }else{
        DESTDIR = ./build
    }
    message(Auto set DESTDIR = $${DESTDIR})
}




#=========== Terget Name ========
TS_BASENAME = $${TARGET}

CONFIG (debug, debug|release) {
    contains(TEMPLATE, lib){
        TARGET = $$qtLibraryTarget($$TARGET)
    }else{
        TARGET      = $$join(TARGET,,,.d)
    }
    OBJECTS_DIR = $${TMP_DIR}/debug
    # Console added in debug mode
    CONFIG        += console
}else{
    OBJECTS_DIR = $${TMP_DIR}/release
}

#=========== Std pathes ========
UI_DIR      = $${TMP_DIR}/uic
MOC_DIR     = $${TMP_DIR}/moc
RCC_DIR        = $${TMP_DIR}/rcc

#=========== build all if debug_and_release ========
contains(CONFIG, debug_and_release) {
    CONFIG        += build_all
}


#================== HARDCODED NAMES ===============
contains(HARDCODED, target) {
    TARGETTMP = '\\"$${TARGET}\\"'
    DEFINES  += TARGET=\"$${TARGETTMP}\"
}

contains(HARDCODED, translationdir) {
    isEmpty(TRDIR){
        TRDIR = $$DESTDIR
        message(Auto set TRDIR = $${TRDIR})
    }
    TRDIR_TMP = '\\"$${TRDIR}\\"'
    DEFINES  += TRDIR=\"$${TRDIR_TMP}\"

}

contains(HARDCODED, translations) {
    isEmpty(TRDIR){
        TRDIR = $$DESTDIR
        message(Auto set TRDIR = $${TRDIR})
    }
    TRDIR_TMP = '\\"$${TRDIR}\\"'
    DEFINES  += TRDIR=\"$${TRDIR_TMP}\"

    TS_BASENAME_TMP = '\\"$${TS_BASENAME}\\"'
    DEFINES  += TS_BASENAME=\"$${TS_BASENAME_TMP}\"
    

}

contains(HARDCODED, version) {
    isEmpty(VERSION){
        error (Version is HARDCODED but is Empty)
    }else{
        VER_TMP = '\\"$${VERSION}\\"'
        DEFINES  += VERSION=\"$${VER_TMP}\"
    }
}
#========= Makefile Target fo preprocessoring =======
#topreprocessor1.target    = %.i
#topreprocessor1.depends    = $(MAKEFILE).Debug FORCE
#topreprocessor1.commands    = $(MAKE) -f $(MAKEFILE).Debug $@

#QMAKE_EXTRA_TARGETS       += topreprocessor1

#CONFIG (debug, debug|release) {
#    topreprocessorcpp.target    = %.i
#    topreprocessorcpp.depends    = %.cpp
#    topreprocessorcpp.commands    = $(CXX) -E $(CXXFLAGS) $(INCPATH) $< -o $@
#    QMAKE_EXTRA_TARGETS       += topreprocessorcpp

#    topreprocessorh.target    = %.i
#    topreprocessorh.depends    = %.h
#    topreprocessorh.commands    = $(CXX) -E $(CXXFLAGS) $(INCPATH) $< -o $@
#    QMAKE_EXTRA_TARGETS       += topreprocessorh

#    toprprocessorc.target    = %.i
#    toprprocessorc.depends    = %.c
#    toprprocessorc.commands    = $(CXX) -E $(CXXFLAGS) $(INCPATH) $< -o $@
#    QMAKE_EXTRA_TARGETS       += toprprocessorc
#}
#=================== DEBUG PRI ======================
!contains(DEBUGCONFIG, false){
    message("If you no need debug pri-file, then write next: DEBUGCONFIG = false")
    message(CONFIG = $${CONFIG})
    message(DESTDIR=$${DESTDIR})
    message(TARGET=$${TARGET})
    message(QMAKE_TARGET=$${QMAKE_TARGET})
    
    message(TMPDIR=$${TMPDIR})
    message(TRDIR=$${TRDIR})
    message(OBJECTS_DIR=$${OBJECTS_DIR})
    message(INCLUDEPATH = $${INCLUDEPATH})
    message(QMAKE_LIBDIR = $${QMAKE_LIBDIR})
    message(LIBS = $${LIBS})
    !isEmpty(HARDCODED){
        message(HARDCODED = $${HARDCODED})
        message(DEFINES = $${DEFINES})
    }    
    message(===================================)
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 5:37