当我调用CMake时如何定义变量,以便qtcreator知道它已定义?

时间:2011-09-13 20:47:12

标签: cmake qt-creator

我有一段代码根据#define有条件地激活,如下所示:

#ifdef VARIABLE
  code.function();
#endif

cmake脚本有一个'options'命令,用于设置VARIABLE,如下所示:

option(VARIABLE "Want to use VARIABLE?" ON)

if(VARIABLE)
   message(STATUS "VARIABLE")
   set(VARIABLE_FLAG "-DVARIABLE")
endif()

set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${VARIABLE_FLAG} -Wall")

我正在使用cmake来构建项目,并使用qtcreator作为IDE。我的问题是qtcreator认为VARIABLE没有定义所以我的代码没有突出显示,但是当我在控制台上构建它时,定义了VARIABLE。那么,我应该将哪些参数传递给qtcreator来运行cmake,以便它知道VARIABLE已定义并突出显示我的代码?有没有办法做到这一点?

Ps:我只使用qtcreator编辑文件,构建部分通过控制台命令完成。

3 个答案:

答案 0 :(得分:5)

另一种方法是使用已配置的头文件,并仅在需要定义的地方包含它:

# in CMakeLists.txt
configure_file(
  ${CMAKE_CURRENT_SOURCE_DIR}/my_defs.h.in
  ${CMAKE_CURRENT_BINARY_DIR}/my_defs.h
  )

include_directories(${CMAKE_CURRENT_BINARY_DIR})

// in my_defs.h.in
#cmakedefine VARIABLE
  // configure_file converts #cmakedefine of a named CMake variable
  // into a C++ #define of a C++ pre-processor symbol

最后

// in various C++ source or header files, but only as needed:
#include "my_defs.h"
#ifdef VARIABLE
  doSome_VARIABLE_SpecificStuff();
#endif

我不定期使用QtCreator,所以我不知道这种技术是否在语法高亮方面有效,但我认为它会,因为他们必须读取头文件才能正确地完成它...

答案 1 :(得分:3)

看看add_definitions()。它为编译器添加了一个预处理器 - 定义,可以像任何普通的#define一样使用:

add_definitions( -DVARIABLE )

然而......我不确定这是否会让qtcreator将其作为“已知变量”进行选择。

答案 2 :(得分:1)

您还可以使用 project_name.config 文件。它专门用于您的需要。您可以添加仅由QtCreator解释的定义,以突出显示和自动完成。

此文件通常位于项目的根文件夹中。