2012-01-29 7 views
6

In primo luogo, diamo un'occhiata al estratto dal mio CMakeLists.txt:CMake + Qt = definizioni Qt intagliate nella pietra (alias -DQT _...)?

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

Pertanto, per impostazione predefinita otteniamo le seguenti definizioni in modalità debug:

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

Quindi la prima domanda è: perché ci sono due -DQT_DLL definizioni?

Ora, se appendo, ad esempio, remove_definitions(-DQT_DEBUG) - non cambia nulla. In altre parole, il comando remove_definitions è bloccato o queste definizioni sono semplicemente scolpite nella pietra.

poi ho pensato come "OK, forse remove_definitions comando è davvero spiati, facciamolo in un altro modo." E ho fatto list(REMOVE_ITEM QT_DEFINITIONS -DQT_DEBUG). Tuttavia, non ha funzionato neanche.

Pertanto, la seconda questione è: sono queste definizioni realmente integrato e persistente e non può essere modificato in qualsiasi circostanza?

NOTA: Nonostante i problemi con la modifica di queste definizioni built-in, è ancora possibile aggiungere definizioni personalizzate, per esempio:

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

risposta

2

Ok, qui abbiamo diverse cose. Si riduce ai macro CMake e alla loro logica.

Il doppio -DQT_DLL viene da add_definitions(${QT_DEFINITIONS)}). È sufficiente specificare include(${QT_USE_FILE}).

QT_USE_FILE definisce QT_DEBUG (o QT_NO_DEBUG) in base alla corrente CMAKE_BUILD_TYPE. Se per qualsiasi motivo non si desidera avere QT_DEBUG nella modalità DEBUG (e lavorare con QT_USE_FILE) ci potrebbe essere un modo per farlo. CMake mette queste definizioni specifiche nelle proprietà della directory:

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() 

Ora, si potrebbe provare tweaking queste impostazioni ...