6

首先,让我们看一下我的摘录CMakeLists.txt

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

因此,默认情况下,我们在 Debug 模式下得到以下定义:

-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)
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 回答