CLion 无法将项目识别为 C++14

Posted

技术标签:

【中文标题】CLion 无法将项目识别为 C++14【英文标题】:CLion does not recognize project as C++14 【发布时间】:2018-03-03 14:57:24 【问题描述】:

几个月来,我一直在使用 CMake 开发 personal project。以前,我使用以命令行为中心的方法(在 Geany 之类的编辑器中编辑代码,然后使用 make 构建),因此我围绕我的项目构建了自己的 CMakeLists.txt。我的项目有一个根 CMakeLists.txt,表明使用的 C++ 标准是 C++14,带有 set(CMAKE_CXX_STANDARD 14)set(CMAKE_CXX_STANDARD_REQUIRED ON),并添加了一些子文件夹中存在的子项目。

前段时间,我决定尝试 CLion,因为它具有多种功能。我将项目导入 CLion(没有让它覆盖我的CMakeLists.txt),直到现在我都对它非常满意。然而,即使最新版本的 CLion 明确支持 C++14,代码分析器仍然存在方法类型推导(即auto 方法)的问题,它推断为void。无论如何,我的代码编译得很好而且很干净,因为它使用了我安装的 Clang 工具链。

我的主要CMakeLists.txt 看起来像这样:

cmake_minimum_required(VERSION 3.9)

project(ReboundTheGame)

set(CMAKE_MODULE_PATH $CMAKE_SOURCE_DIR/CMakeModules $CMAKE_MODULE_PATH)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_INSTALL_PREFIX $CMAKE_BINARY_DIR/install)
set(SFML_STATIC_LIBRARIES ON)

set(COMMONS_INCLUDE_DIR $CMAKE_SOURCE_DIR/Commons)

if(MSVC)
    add_definitions(-D_USE_MATH_DEFINES -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS /wd4244)
endif()

add_subdirectory(CppMunk)
add_subdirectory(ExportTools)
add_subdirectory(MainGame)
add_subdirectory(Languages)
add_subdirectory(Resources)

add_custom_target(install_everything
    "$CMAKE_COMMAND" --build "$CMAKE_BINARY_DIR" --target install
    DEPENDS MainGame Languages Resources
    COMMENT "Installing $PROJECT_NAME")

有趣的是,我从 CLion 创建了一个空白 C++14 来测试它的功能,它的 CMakeLists.txt 具有我在项目中使用的完全相同命令:

cmake_minimum_required(VERSION 3.9)
project(TestProject)    

set(CMAKE_CXX_STANDARD 14) // what's the difference??

add_executable(TestProject main.cpp)

然而 CLion 设法纠正了我在代码中使用的 auto 方法的类型推断。

到目前为止,我还没有深入研究两者的.idea 文件夹以发现问题所在,但我现在对如何解决这个问题一无所知。我想这可能是项目的错误配置,所以如果有人需要,我可以附上我存储文件夹的存档供您检查。我使用的是 Ubuntu 17.10,将我的 cc 设置为 clang 并将我的 c++ 设置为 clang++

【问题讨论】:

【参考方案1】:

CLion 的自动类型推断存在问题。这可能是 IDE 问题,而不是您的代码。 https://youtrack.jetbrains.com/issues/CPP?q=%7Bauto%20and%20type%20and%20void%7D%20%23Unresolved

但我们正在努力让它变得更好。如果您在列表中没有找到代码上下文,请报告您的问题。

【讨论】:

以上是关于CLion 无法将项目识别为 C++14的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse 导入外部项目无法识别为web项目并且无法在部署到tomcat下

为啥此代码无法将 lista 识别为列表? [关闭]

我的usb设备总是会被识别为libusb-win32 devices

移动端车牌识别为优质app而存在

adb 在 Windows 上未被识别为内部或外部命令

Java :无法将Java项识别为 cmdlet函数脚本文件或可运行程序的名称