Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake+;Qt=刻在石头上的Qt定义(又名-DQT_u……?)?_Qt_Cmake_Built In_Definitions - Fatal编程技术网

CMake+;Qt=刻在石头上的Qt定义(又名-DQT_u……?)?

CMake+;Qt=刻在石头上的Qt定义(又名-DQT_u……?)?,qt,cmake,built-in,definitions,Qt,Cmake,Built In,Definitions,首先,让我们看一下我的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_DE

首先,让我们看一下我的
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
所以第一个问题是:为什么有两个定义

现在,如果我附加,例如,
remove\u定义(-DQT\u DEBUG)
,什么都不会改变。换句话说,要么
remove_definitions
命令被窃听,要么这些定义只是刻在石头上的

然后我想“好吧,也许
remove\u definitions
命令真的有问题,让我们换一种方式来做吧。”然后我做了
list(remove\u ITEM QT\u definitions-DQT\u 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)

好的,这里我们有几件事。它归结为
CMake
宏及其逻辑

-DQT\u DLL
来自
add\u定义(${QT\u定义)}
。 指定
include(${QT\u USE\u FILE})
就足够了

QT\u-USE\u-FILE
基于当前的
CMAKE\u-BUILD\u类型定义
QT\u-DEBUG
(或
QT\u-NO\u-DEBUG
)。如果出于任何原因,您不想在
DEBUG
模式下使用
QT\u DEBUG
(以及使用
QT\u USE\u 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()
现在,您可以尝试调整这些设置