РЕДАКТИРОВАТЬ : Оказывается, проблема заключалась в сложности моего проекта.Использование приведенного ниже простого примера работает, как и ожидалось, но 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?