我正在使用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构建文件以使其正常工作?
答案 0 :(得分:3)
应使用add_definitions
添加宏,而不是通过CMAKE_CXX_FLAGS添加。
另一个问题是你的旗帜搞砸了 - 你使用cmake_ C _flags将值加载到cmake_ CXX _flags