我有一个只包含头文件的库项目,使用cmake命令进行设置:
add_library(my_library INTERFACE)
我还添加了
target_sources(my_library INTERFACE ${MY_LIRBARY_HEADER_FILES})
但是当我打开一个源文件时,会收到以下警告:
此文件不属于任何项目目标,代码洞察功能可能无法正常工作
我失去了很多功能,比如代码自动补全。
应该如何设置才能使CLion在仅有头文件的库上提供其通常的功能?
我有一个只包含头文件的库项目,使用cmake命令进行设置:
add_library(my_library INTERFACE)
我还添加了
target_sources(my_library INTERFACE ${MY_LIRBARY_HEADER_FILES})
但是当我打开一个源文件时,会收到以下警告:
此文件不属于任何项目目标,代码洞察功能可能无法正常工作
我失去了很多功能,比如代码自动补全。
应该如何设置才能使CLion在仅有头文件的库上提供其通常的功能?
我遇到了同样的问题,尽管该项目不是仅由头文件组成,但是从inc
文件夹打开的文件仍然会抛出上述警告,尽管CMake文件明确将该文件夹标记为include_directory
。
include_directories("${PROJECT_SOURCE_DIR}/inc/")
add_subdirectory(src)
add_executable(${EXECUTABLE_NAME} main.cpp ${SOURCE})
因为这是一个完全有效的CMake文件,将包含文件添加到源文件中并不符合惯例,我不想修改CMake文件。
正如官方JetBrains论坛所述,CMake文件确实有效,警告是由于CLion无法正确索引头文件而显示的。从链接中提取的建议性解决方案是:右键单击文件夹并选择标记目录为
|库文件
/项目源和头文件
。
因此,这个头文件没有被包含在可执行文件中,CLion会通知你一些代码提示功能可能无法正常工作。可以使用“标记目录为”库文件/项目源和头文件的文件夹来解决问题。
Clion从CMake构建系统中获取源文件的信息。当您将任何cpp文件添加到源列表中时,CMake会自动通知具有相同名称的头文件。因此,如果cpp / h名称不同(或根本没有cpp文件),则应手动包含头文件。
set(Sources my_lib.cpp)
set(Headers header_of_my_lib.h)
add_executable(superlib ${Sources} ${Headers})
您可以像这样将头文件添加到您的项目中:
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)
虽然在评论中提到过,但你可能根本不应该将头文件添加到你的项目中。
这个警告是一个IDE问题,如果当前目录不包含任何源文件,Android Studio将无法识别它。
在相关目录下添加一个空的源文件,例如empty_xxx.c
,并在相应的CMakeList.txt
中添加以下行:
add_library(${TARGET_NAME_XXX} SHARED ${SOME_DIR_HAVING_THIS_WARNING}/empty_xxx.c)
将有助于消除此警告。
标记目录为 | 库文件/项目源和头文件
。 - shizhen
CLION_IDE
环境变量,因此您可以将头文件添加到源数组if ($ENV{CLION_IDE})
中,从而使clion正确地索引所有内容(但会破坏您实际使用Clion集成构建的能力)。 - Chris Kitching