CMake通过预处理器定义有条件地添加Qt信号

时间:2013-11-30 20:03:55

标签: c++ qt cmake

我正在使用CMake作为构建系统开发一个Qt项目,但我遇到了一些问题。

出于调试目的,我想在我的应用程序中添加一些额外的按钮,这意味着我还需要相关的信号/插槽来连接它们。但是,由于它们纯粹是为了调试,我只希望它们包含在应用程序中,如果它是在调试模式下构建的。为此,我正在使用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 CMAKE_CXX_FLAGS时,AUTOMOC的值不会被考虑在内。如何更改我的CMake构建文件以使其正常工作?

1 个答案:

答案 0 :(得分:3)

应使用add_definitions添加宏,而不是通过CMAKE_CXX_FLAGS添加。

另一个问题是你的旗帜搞砸了 - 你使用cmake_ C _flags将值加载到cmake_ CXX _flags