2015-08-17 14 views
5

Quindi io uso qmake per creare il mio programma, ma sono sempre che hanno un conflitto tra il mio debug e rilasciare le librerie Boost con il messaggio:Come individuare il bersaglio di Qt Creator (debug/release) (Visual Studio)

libboost_system-vc120-mt-s-1_58.lib(error_code.obj):-1: error: LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj 

Mi piacerebbe rendere questo automatizzato, in modo tale che sia sufficiente scegliere il debug o il rilascio da Qt Creator per creare la versione corretta. Ho visto altre soluzioni come quella here, ma non funziona. Il motivo per cui non funziona si può vedere quando si chiama il seguente comando sia per il debug e rilasciare:

message($$CONFIG) 

che stampare la configurazione di qmake. I risultati sono i seguenti:

Per diffusione:

lex yacc di debug eccezioni depend_includepath testcase_targets import_plugins import_qpa_plugin rtti_off incremental_off finestre link_prl rilascio qt warn_on incrementale piatto precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe C++ 11 di debug statico no_plugin_manifest rtti QPA win32 copy_dir_files MSVC rilasciano

Per Debug:

lex yacc di debug eccezioni depend_includepath testcase_targets import_plugins import_qpa_plugin rtti_off incremental_off finestre link_prl rilascio qt warn_on incrementale piatto precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe C++ 11 di debug statico RTTI no_plugin_manifest QPA win32 copy_dir_files MSVC

noti che sia contiene il debug e il rilascio ... e mi chiedo perché ...

Vorrei sottolineare che ho compilato questa versione Qt dalla fonte. Ma non c'era niente di strano quando l'ho fatto. Ho usato il seguente comando per compilarlo (configure quindi compilare con semplice NMAKE):

configure -debug-and-release -opensource -platform win32-msvc2013 -opengl desktop -static -nomake examples -nomake tests 

ho cercato una soluzione noiosa aggiungendo il comando: debug:CONFIG-=release nel mio file di marca, ma che farà sì che la versione finale di diventare il debug con una dimensione di 30 MB invece di 14 MB quando scelgo la versione di Qt Creator.

Il mio file qmake è tipico. Quello che segue è la parte che potrebbe avere qualcosa a che fare con il problema. Le altre parti aggiungono solo file e librerie e percorsi:

QMAKE_CFLAGS += /MT 

QT  += core gui 

unix:QMAKE_CXXFLAGS += -std=c++11 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

TARGET = MyProg 
TEMPLATE = app 

Quindi perché questo problema si verifica? Perché il mio debug o rilascio di un debug e rilascio? Come posso distinguere tra loro?

Si prega di chiedere se avete bisogno di ulteriori informazioni.

+0

http://code.qt.io/cgit/qt/qtbase.git/tree/configure#n2401 dice che 'debug e rilascio 'è un'opzione solo per Mac. – Mitch

+0

@Mitch Weird ... non ha mai avuto problemi con la compilazione! –

+0

Se questo sembra un bug, per favore segnalalo. Sembra che dovresti almeno ricevere un avvertimento, e questo potrebbe averti risparmiato un sacco di tempo ... ma non ne so molto su qmake. – Mitch

risposta

0

La risposta è Penso che in Qt project org faq 355

Se si accetta sempre il nome Qt Creator suggerisce per la build è possibile utilizzare la seguente soluzione semplice nei file pro che nel mio caso (Qt 5.5) lavora per Linux, Mac e Windows:

# to distinguish between debug and release executable as target 
# we define the variables releaseExec and debugExec 
# this only works if the $$OUT_PWD has "Release" in its name 
BDIR = $$OUT_PWD 
BDIR_STRIPPED = $$replace(BDIR,Release,) 
equals (BDIR,$$BDIR_STRIPPED): CONFIG+= debugExec 
else: CONFIG+= releaseExec 

Abbiamo usato le variabili releaseExec e debugExec per evitare conflitti di nomi con variabili Qt CONFIG.

È ora possibile utilizzare le istruzioni switch:

releaseExec: warning ("this is a release build") 
debugExec: warning ("this is a debug build")