c++ - CMake 使用预处理器定义有条件地添加 Qt 信号

标签 c++ qt cmake

我正在开发一个使用 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/

相关文章:

cmake - 无法使用 Visual Studio 2010 Express 配置 CMake

opencv - 安装OpenCV:未在CMake中指定内核数

C++ SPDLOG编译错误: variable or field ‘set_error_handler’ declared void

c++ - 设计用于处理对象的管道

c++ - 重写 operator new 时编译器错误

C++ std::unique 没有显示我对它的期望

android - QT Widget 使用 OpenCV 错误部署到 Android

c++ - 将 QWidgets 放置在指定的坐标?

qt - 我可以为多个信号设置一个插槽吗?

c++ - 调用构造函数的次数