2015-08-17 20 views
5

więc używam qmake stworzyć swój program, ale jestem zawsze o konflikt między moim debugowania i zwolnij bibliotek Boost z komunikatem:Jak wykryć cel Qt Creator'S (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 

Chciałbym uczynić to zautomatyzowanym, w taki sposób, aby wybór debugowania lub wydania z Qt Creator był wystarczający do utworzenia poprawnej wersji. Widziałem inne rozwiązania, takie jak ta here, ale to nie działa. Powodem, dla którego to nie działa można zaobserwować podczas wywoływania następujące polecenie dla obu debugowania i zwolnij:

message($$CONFIG) 

który wypisze konfigurację qmake. Wyniki są następujące:

Na wydaniu:

lex Yacc wyjątków debugowania depend_includepath testcase_targets import_plugins import_qpa_plugin rtti_off incremental_off okien qt warn_on uwalnianiu link_prl przyrostowe płaskim precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe C++ 11 debug statyczny RTTI no_plugin_manifest QPA win32 copy_dir_files MSVC zwolnić

do debugowania:

lex Yacc debugowania wyjątki depend_includepath testcase_targets import_plugins import_qpa_plugin rtti_off incremental_off okna qt warn_on uwolnienie link_prl przyrostowe płaskim precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe C++ 11 debugowania statyczny RTTI no_plugin_manifest QPA win32 copy_dir_files MSVC

Uwaga, zarówno zawierają debugowanie i wydanie ... i zastanawiam się, dlaczego ...

Chciałbym podkreślić, że skompilowałem tę wersję Qt ze źródła. Ale kiedy to zrobiłem, nie było żadnych dziwnych rzeczy. Kiedyś następujące polecenie, aby go skompilować (configure następnie skompilować z prostego nmake):

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

Próbowałem tępy rozwiązanie dodając komendę: debug:CONFIG-=release w moim pliku make, ale to spowoduje, że wersja release stać debug o wielkości 30 MB zamiast 14 MB, gdy wybieram wersję od Qt Creator.

Mój plik qmake jest typowy. Poniżej znajduje się część, która może mieć cokolwiek wspólnego z problemem. Pozostałe części to tylko dodawanie plików i bibliotek oraz ścieżek:

QMAKE_CFLAGS += /MT 

QT  += core gui 

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

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

TARGET = MyProg 
TEMPLATE = app 

Dlaczego tak się dzieje? Dlaczego moje debugowanie lub wydawanie jest debugowaniem i wydaniem? Jak mogę je rozróżnić?

Proszę zapytać, czy potrzebujesz dodatkowych informacji.

+0

http://code.qt.io/cgit/qt/qtbase.git/tree/configure#n2401 mówi, że 'debug-and-release 'jest opcją tylko dla komputerów Mac. – Mitch

+0

@Mitch Weird ... nigdy nie miałem problemu z kompilacją! –

+0

Jeśli to wygląda na błąd, zgłoś go. Wygląda na to, że powinieneś przynajmniej otrzymać ostrzeżenie i to może zaoszczędzić ci sporo czasu ... ale nie wiem zbyt wiele o qmake. – Mitch

Odpowiedz

0

Odpowiedź jest myślę w Qt project org faq 355

Jeśli zawsze zaakceptować nazwę Qt Creator proponuje dla produkcji można wykorzystać następujące proste rozwiązanie w swoich pro plików, które w moim przypadku (Qt 5.5) działa na Linux, Mac i 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 

Użyliśmy zmienne releaseExec i debugExec w celu uniknięcia kolizji nazw zmiennych z Qt config.

Teraz można użyć stwierdzenia przełączników:

releaseExec: warning ("this is a release build") 
debugExec: warning ("this is a debug build") 
Powiązane problemy