75

我有一个使用 cmake 命令设置的仅标头库项目:

add_library(my_library INTERFACE)

我还添加了

target_sources(my_library INTERFACE ${MY_LIRBARY_HEADER_FILES})

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

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

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

设置它的正确方法是什么,以便 CLion 在仅标头库上提供其常用功能?

4

4 回答 4

115

小背景

我遇到了同样的问题,尽管该项目不是仅标题,但是,inc即使 CMake 文件清楚地将该文件夹标记为include_directory.

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

include_directories("${PROJECT_SOURCE_DIR}/inc/")
add_subdirectory(src)
add_executable(${EXECUTABLE_NAME} main.cpp ${SOURCE})

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

解决方案

如官方JetBrains 论坛所述,CMake 文件确实有效,并且由于 CLion 无法正确索引头文件而显示警告。从链接中提取的建议解决方法是右键单击文件夹并Mark directory as| Library Files/Project Sources and Headers

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

于 2017-11-11T17:32:38.390 回答
3

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 仍然会知道文件

于 2017-09-16T13:41:35.370 回答
0

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

解决方法

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

add_library(${TARGET_NAME_XXX} SHARED ${SOME_DIR_HAVING_THIS_WARNING}/empty_xxx.c)

将有助于摆脱这个警告。

于 2021-07-26T11:15:48.333 回答
-1

您可以像这样将头文件添加到您的项目中:

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

您也可以像这样在多个步骤中设置它:

set(SOURCE_FILES main.cpp)
set(SOURCE_FILES ${SOURCE_FILES} MyClass1.cpp MyClass1.h)
set(SOURCE_FILES ${SOURCE_FILES} MyClass2.cpp MyClass2.h)

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

于 2017-11-02T23:08:14.210 回答