Как определить переменную при вызове CMake, чтобы qtcreator знал, что она определена? - PullRequest
6 голосов
/ 14 сентября 2011

У меня есть раздел кода, который активируется в зависимости от #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 ]

5 голосов
/ 14 сентября 2011

Другой вариант - использовать настроенный заголовочный файл и включать его только там, где вам нужно определение:

# 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 регулярно, поэтому я не знаю, работает ли этот метод с точки зрения их подсветки синтаксиса, но я бы предположил, что это будет так, поскольку они должны читать заголовочные файлы, чтобы правильно выполнятьэто ...

3 голосов
/ 14 сентября 2011

Взгляните на add_definitions () . Он добавляет определение препроцессора в компилятор и может использоваться как любой обычный #define:

add_definitions( -DVARIABLE )

Однако ... я не уверен, заставит ли это qtcreator выбрать его как "известную переменную".

1 голос
/ 24 июня 2015

Вы также можете использовать файл project_name.config .Он специально используется для ваших нужд.Вы можете добавить определения, которые интерпретируются только QtCreator для выделения и автозаполнения.

Этот файл обычно находится в корневой папке вашего проекта.

...