在CLion中,仅头文件库:文件"不属于任何项目目标,代码洞察功能可能无法正常工作"

时间:2017-09-15 18:42:44

标签: c++ cmake clion header-only

我使用cmake命令设置了一个仅限标题的库项目:

add_library(my_library INTERFACE)

我还添加了

target_sources(my_library INTERFACE ${MY_LIRBARY_HEADER_FILES})

但是当我打开源文件时,我收到警告:

  

此文件不属于任何项目目标,代码洞察功能可能无法正常工作

我在代码完成等方面失去了很多功能。

设置此选项的正确方法是什么,以便CLion在仅限标题的库中提供其常用功能?

4 个答案:

答案 0 :(得分:64)

小背景

我遇到了同样的问题,虽然项目不是仅限标题,然而,来自inc文件夹的打开文件抛出上述警告,即使CMake文件明确标记该文件夹为{{ 1}}。

* .hpp文件不属于$ {SOURCE}

include_directory

由于这是一个完全有效的CMake文件,并且将包含文件添加到源文件不是惯用的,我不想修改CMake文件。

解决方案

正如官方JetBrains Forum所述,CMake文件确实有效,并且由于CLion无法正确索引头文件而显示警告。从链接中提取的建议解决方法是右键单击文件夹和include_directories("${PROJECT_SOURCE_DIR}/inc/") add_subdirectory(src) add_executable(${EXECUTABLE_NAME} main.cpp ${SOURCE}) | Mark directory as / Library Files

  

因此,此标头不包含在可执行文件中,并且CLion会通知您某些代码洞察功能可能无法正常工作。作为解决方法,您可以使用“将目录标记为”库文件/项目源和文件夹的标题。

答案 1 :(得分:2)

Clion从CMake构建系统获取有关源文件的信息。当您将任何cpp文件添加到源列表时,CMake会自动告诉您具有相同名称的标头。因此,如果cpp / h名称不同(或者您根本没有cpp文件),则应手动包含标题。

set(Sources my_lib.cpp)
set(Headers header_of_my_lib.h)
add_executable(superlib ${Sources} ${Headers})

如果您没有任何可执行文件,您可以省略最后一行,CLion仍然会知道文件

答案 2 :(得分:0)

您可以将头文件添加到项目中,如下所示:

#####
import re
string = "dog, cat, baby, balloon, me"
a = re.findall('\w{4,}',string)
print(a)

您也可以通过多个步骤进行设置:

set(SOURCE_FILES main.cpp MyClass1.cpp MyClass1.h MyClass2.cpp MyClass2.h)

尽管如评论中所述,您可能根本不应该将头文件添加到项目中。

答案 3 :(得分:0)

此警告是一个 IDE 问题,Android Studio 无法识别当前目录如果它不包含任何源文件

解决方法

添加一个空的源文件,例如empty_xxx.c在有问题的目录下并在相应的CMakeList.txt

中添加以下行
add_library(${TARGET_NAME_XXX} SHARED ${SOME_DIR_HAVING_THIS_WARNING}/empty_xxx.c)

将有助于消除此警告。