2015-01-27 4 views
5

Я создаю визуальное студийное решение с использованием cmake. И теперь я хочу сгенерировать файлы pdb для сборки Release. (Почему, потому что я хочу иметь символы в случае, когда пользователь нашел ошибку?)Как сгенерировать файлы pdb для сборки Release с флагов cmake?

Я попытался, установив следующие флаги без успеха:

set(CMAKE_CONFIGURATION_TYPES ${CMAKE_BUILD_TYPE} CACHE STRING "Build Types" FORCE) 

IF(WIN32) 

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Release") 
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/debug /INCREMENTAL") 
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/debug /INCREMENTAL") 
set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "/debug /INCREMENTAL") 
set(CMAKE_CXX_FLAGS_RELEASE "/MD /Zi /O2 /Ob1 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELEASE "/MD /Zi /O2 /Ob1 /D NDEBUG") 
ENDIF(WIN32) 

Похоже Cmake игнорирует эти наборы: Заранее спасибо за помощь!

+0

Вы можете уточнить - без успеха? Получаете ли вы ошибку, отсутствуют результаты или просто не работают? –

+1

Просто не работает. Интересно, что строка «set (CMAKE_CONFIGURATION_TYPES $ CMAKE_BUILD_TYPE) CACHE STRING« Типы сборки »FORCE)« перезаписывает флаги –

+0

Я пробовал это в дополнение к '' 'add_executable (out a.cpp b.cpp)' '' и когда я построил конфигурацию Release, был также файл .pdb. И это было отлаживаемо. Не могли бы вы разместить более подробную информацию? И btw не используют '' '' 'CMAKE_BUILD_TYPE'' при генерации для MSVC – onqtam

ответ

7

я использовал флаги

set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi") 
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF") 

This site объясняет подробности

+1

' CMAKE_SHARED_LINKER_FLAGS_RELEASE' является глобально кэшированной переменной, поэтому мне пришлось добавить 'CACHE STRING 'FORCE'. Также не забудьте использовать соответствующие символы 'CMAKE_STATIC_LINKER_FLAGS_RELEASE' и' CMAKE_EXE_LINKER_FLAGS_RELEASE'. –