6

まず、私の抜粋を見てみましょうCMakeLists.txt

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

したがって、最初の質問は、なぜ2つの-DQT_DLL定義があるのか​​ということです。

たとえば、追加しても、remove_definitions(-DQT_DEBUG)何も変わりません。言い換えれば、remove_definitionsコマンドにバグがあるか、これらの定義が単に石に刻まれているだけです。

それで、「OK、remove_definitionsコマンドが本当にバグがあるのか​​もしれない。別の方法でやろう」と思いました。そして、私はしましたlist(REMOVE_ITEM QT_DEFINITIONS -DQT_DEBUG)。しかし、それも機能しませんでした。

したがって、2番目の質問は次のとおりです。これらの定義は本当に組み込みで永続的であり、どのような状況でも変更できませんか?

注:これらの組み込み定義の編集には問題がありますが、たとえば次のようにカスタム定義を追加することは可能です。

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

1 に答える 1

2

さて、ここにいくつかあります。それは、CMakeマクロとそのロジックに要約されます。

ダブル-DQT_DLLはから来ていadd_definitions(${QT_DEFINITIONS)})ます。を指定するだけで十分include(${QT_USE_FILE})です。

QT_USE_FILE現在のに基づいてQT_DEBUG(または)を定義します。なんらかの理由でモードにしたくない(そして操作したくない)場合は、それを行う方法があるかもしれません。これらの特定の定義をディレクトリプロパティに配置します。QT_NO_DEBUGCMAKE_BUILD_TYPEQT_DEBUGDEBUGQT_USE_FILECMake

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

今、あなたはこれらの設定を微調整することを試みることができます...

于 2012-04-03T21:58:05.243 に答える