CLion не подбирает (сложные) определения препроцессора - PullRequest
0 голосов
/ 23 сентября 2019

РЕДАКТИРОВАТЬ : Оказывается, проблема заключалась в сложности моего проекта.Использование приведенного ниже простого примера работает, как и ожидалось, но CLion не может понять сложные зависимости проекта, над которым я работаю.Использование связанного вопроса в качестве обходного пути на данный момент.

Я использую CLion в качестве C ++ IDE и добавил простую директиву препроцессора в качестве опции CMake:

cmake_minimum_required(VERSION 3.10)
project(cmake_macro_test)

set(CMAKE_CXX_STANDARD 14)

option(SIMPLE_FLAG "My simple flag." ON)
if(SIMPLE_FLAG)
    add_definitions(-DSIMPLE_FLAG) # Using CMake 3.10
endif()

add_executable(cmake_macro_test main.cpp)

Тогда в моем коде есть разделы условной компиляции в виде:

#include <iostream>

int main() {

#ifdef SIMPLE_FLAG
// Do things
  std::cout << "Hello, World!" << std::endl;
#else
  // Do other things
  std::cout << "Goodbye, World!" << std::endl;
#endif
  return 0;
}

По умолчанию этот флаг включен, поэтому я ожидал, что Clion выберет его из CMakeLists.txt и выделит соответствующие части кода.

Однако, Clion рассматривает часть кода //Do things как мертвую и обеспечивает подсветку синтаксиса или автозаполнение для этого раздела, если я фактически не переопределю флаг в том же файле, что приведет к поражению.цель опции CMake.

Это известная проблема с CLion?Есть ли какой-нибудь способ гарантировать, что флаги препроцессора будут подняты IDE?

...