Поэтому я использую qmake для создания своей программы, но у меня всегда возникает конфликт между моими библиотеками отладки и повышения выпуска с сообщением:
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
Я хотел бы сделать это автоматизированным таким образом, чтобы выбора отладки или выпуска из Qt Creator было достаточно для создания правильной версии. Я видел другие решения, такие как здесь , но это не работает. Причину, по которой это не работает, можно увидеть, вызвав следующую команду как для отладки, так и для выпуска:
message($$CONFIG)
который распечатает конфигурацию qmake. Результаты следующие:
Для выпуска:
lex yacc, исключения отладки
Для отладки:
lex yacc debug exceptions independent_includepath testcase_targets import_plugins import_qpa_plugin rtti_off incremental_off windows qt warn_on release link_prl инкрементный плоский precompile_header autogen_precompile_source debug_and_release debug_and_release_target_source_debug_and_release_debug_and_release_target_master_manifest_master_manif_dug_manif
Обратите внимание, что оба содержат отладку и выпуск ... и мне интересно, почему ...
Хочу отметить, что я скомпилировал эту версию Qt из исходников. Но когда я это сделал, не было ничего странного. Я использовал следующую команду для его компиляции (настройте, а затем скомпилируйте с помощью простого nmake):
configure -debug-and-release -opensource -platform win32-msvc2013 -opengl desktop -static -nomake examples -nomake tests
Я попробовал унылое решение, добавив команду: debug:CONFIG-=release
в свой файл make, но это приведет к тому, что версия выпуска станет отладочной с размером 30 МБ вместо 14 МБ, когда я выберу выпуск от Qt Creator.
Мой файл qmake - типичный. Следующая часть может иметь какое-либо отношение к проблеме. Остальные части просто добавляют файлы, библиотеки и пути:
QMAKE_CFLAGS += /MT
QT += core gui
unix:QMAKE_CXXFLAGS += -std=c++11
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MyProg
TEMPLATE = app
Так почему возникает эта проблема? Почему моя отладка или выпуск - отладка и выпуск? Как я могу их различить?
Пожалуйста, спросите, нужна ли вам дополнительная информация.