gpt4 book ai didi

qt - CMake + Qt = 刻在石头上的 Qt 定义(又名。-DQT_...)?

转载 作者:行者123 更新时间:2023-12-04 13:57:01 26 4
gpt4 key购买 nike

首先来看一下我的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)

最佳答案

好的,所以我们有几件事。归结为 CMake宏及其逻辑。

-DQT_DLL来自 add_definitions(${QT_DEFINITIONS)}) .
指定 include(${QT_USE_FILE}) 就足够了.
QT_USE_FILE定义 QT_DEBUG (或 QT_NO_DEBUG )基于当前 CMAKE_BUILD_TYPE .如果出于某种原因您不想拥有 QT_DEBUGDEBUG模式(并与 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()

现在,您可以尝试调整这些设置...

关于qt - CMake + Qt = 刻在石头上的 Qt 定义(又名。-DQT_...)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9053565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com