2012-01-29 5 views
6

Во-первых, давайте посмотрим на отрывок из моей CMakeLists.txt:CMake + Qt = вырезаны в каменных определениях Qt (ака. -DQT _...)?

find_package(Qt4 4.8.0 COMPONENTS QtCore QtGui QtOpenGL REQUIRED) 
include(${QT_USE_FILE}) 
add_definitions(${QT_DEFINITIONS}) 

Поэтому по умолчанию мы получаем следующие определения в режиме отладки:

-DQT_DLL -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_DLL -DQT_DEBUG 

Итак, первый вопрос: почему есть два -DQT_DLL определения?

Теперь, если я добавляю, например, remove_definitions(-DQT_DEBUG) - ничего не меняется. Другими словами, команда remove_definitions прослушивается или эти определения просто вырезаны из камня.

Тогда я подумал, что «ОК, может быть, remove_definitions команда действительно прослушивается, давайте сделаем это по-другому». И я сделал list(REMOVE_ITEM QT_DEFINITIONS -DQT_DEBUG). Однако это тоже не сработало.

Таким образом, второй вопрос заключается в следующем: являются ли эти определения действительно встроенными и постоянными и не могут быть изменены ни при каких обстоятельствах?

ПРИМЕЧАНИЕ: Несмотря на проблемы с редактированием этих встроенных определений, это еще можно добавить пользовательские определения, например:

add_definitions(-DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT) 

ответ

2

Итак, здесь мы имеем несколько вещей. Он сводится к макросам CMake и их логике.

Двойной -DQT_DLL исходит от add_definitions(${QT_DEFINITIONS)}). Достаточно указать include(${QT_USE_FILE}).

QT_USE_FILE определяет QT_DEBUG (или QT_NO_DEBUG) на основе текущего CMAKE_BUILD_TYPE. Если по какой-либо причине вы не хотите иметь QT_DEBUG в режиме DEBUG (и работать с QT_USE_FILE), это может быть способ сделать это. CMake ставит эти конкретные определения в свойствах каталога:

SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG QT_DEBUG) 
SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE QT_NO_DEBUG) 
SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO QT_NO_DEBUG) 
SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL QT_NO_DEBUG) 
IF(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) 
    SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS QT_NO_DEBUG) 
ENDIF() 

Теперь вы можете попробовать настройки этих параметров ...

 Смежные вопросы

  • Нет связанных вопросов^_^