我有一段代码根据#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编辑文件,构建部分通过控制台命令完成。
答案 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解释的定义,以突出显示和自动完成。
此文件通常位于项目的根文件夹中。