Đầu tiên, chúng ta hãy nhìn vào những đoạn trích từ CMakeLists.txt
tôi:CMake + Qt = được khắc trong các định nghĩa Qt bằng đá (aka. -DQT _...)?
find_package(Qt4 4.8.0 COMPONENTS QtCore QtGui QtOpenGL REQUIRED)
include(${QT_USE_FILE})
add_definitions(${QT_DEFINITIONS})
Vì vậy, theo mặc định chúng tôi nhận được định nghĩa sau đây trong chế độ Debug:
-DQT_DLL -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_DLL -DQT_DEBUG
Vì vậy, câu hỏi đầu tiên là: tại sao có hai -DQT_DLL
định nghĩa?
Bây giờ, nếu tôi nối thêm, ví dụ: remove_definitions(-DQT_DEBUG)
- không có gì thay đổi. Nói cách khác, lệnh remove_definitions
bị lỗi hoặc các định nghĩa này chỉ được khắc trên đá.
Sau đó, tôi nghĩ rằng "OK, có thể remove_definitions
lệnh thực sự bị lỗi, hãy thực hiện theo cách khác." Và tôi đã làm list(REMOVE_ITEM QT_DEFINITIONS -DQT_DEBUG)
. Tuy nhiên, nó cũng không hoạt động.
Do đó, câu hỏi thứ hai là: các định nghĩa này có thực sự được tích hợp và liên tục và không thể thay đổi trong bất kỳ trường hợp nào không?
LƯU Ý: Mặc dù vấn đề với cách chỉnh sửa các định nghĩa được xây dựng-in, nó vẫn còn có thể thêm các định nghĩa tùy chỉnh, ví dụ:
add_definitions(-DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT)