编辑:原来问题是我的项目很复杂。使用下面的简单示例可以正常工作,但是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;
}
该标志默认情况下设置为on,因此我希望Clion将从CMakeLists.txt中拾取它并突出显示代码的相关部分。
但是,Clion认为代码的//Do things
部分已失效,并且确实为该部分提供了语法突出显示或自动完成功能,除非我实际上在同一文件中重新定义了该标志,这会破坏目的。 CMake选项。
这是CLion的已知问题吗?有什么方法可以确保IDE可以拾取预处理器标志吗?