我正在开发一个使用 CMake 作为构建系统的 Qt 项目,但我遇到了一些问题。
出于调试目的,我想向我的应用程序添加一些额外的按钮,这意味着我还需要为这些按钮关联信号/槽以连接它们。但是,由于它们纯粹用于调试,所以我只希望在以 Debug模式构建的应用程序中包含它们。为此,我使用了 CMAKE_BUILD_TYPE
。例如,我有以下代码:
IF(NOT CMAKE_BUILD_TYPE)
MESSAGE(STATUS "No CMAKE_BUILD_TYPE specified; defaulting to Debug mode.")
SET(CMAKE_BUILD_TYPE "Debug")
ENDIF()
STRING(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
IF(CMAKE_BUILD_TYPE_LOWER MATCHES debug)
SET(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -DMYAPP_DEBUG")
ENDIF()
这似乎运作良好。如果我启用“verbose makefile”,我会看到 -DMYAPP_DEBUG
被传递给编译器,就像它应该的那样。这似乎对 moc
文件不起作用。
我使用的是较新版本的 CMake(即 >= 2.8.9),因此我启用了新的 CMAKE_AUTOMOC
功能。但是,当我有一个包含以下内容的头文件时:
#ifdef MYAPP_DEBUG
void debugTriggered(bool);
#endif
我在启动应用程序时得到以下信息:
QObject::connect: No such signal MainMenu::debugTriggered(bool)
我假设这样做的原因是当 CMake AUTOMOC
-ing 我的来源时,没有考虑 CMAKE_CXX_FLAGS
的值。我怎样才能改变我的 CMake 构建文件来让它工作?
最佳答案
应使用 add_definitions
添加宏而不是通过 CMAKE_CXX_FLAGS。
另一个问题是你的标志被弄乱了——你使用 cmake_C_flags 将值加载到 cmake_CXX_flags
关于c++ - CMake 使用预处理器定义有条件地添加 Qt 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20305040/