我有一个由几个共享库构建的C ++项目。每个库源代码都放在其子目录下。主CMakeList文件包含add_subdirectory(<dirname>)
指令列表。每个子目录中的CMakeList文件包含如下定义:
set (SOURCE_FILES
util/src/Connector.cpp
pub/util/Connector.h
)
add_library(channels SHARED $( SOURCE_FILES))
SET_TARGET_PROPERTIES(channels PROPERTIES LINKER_LANGUAGE CXX)
其中channels
是子目录名称。
虽然正确设置了包含文件的搜索路径并且编译工作正常,但KDevelop没有看到Connector.h
头文件,因此它的解析和代码/类浏览器不起作用。
我知道每个目录中的.kdev_include_paths
文件可能会解决问题。遗憾的是,由于我们的开发环境中存在一些额外的限制,因此可能无法使用此方法。
还有其他方法可以解决这个问题吗?
我在RHEL 7.1上使用英特尔C / C ++编译器,在AppImage上运行KDevelop 5.0.4。
答案 0 :(得分:1)
我发现并解决了一个类似的问题 - 头文件未见,代码/类浏览器失败。事实证明我的代码中存在错误。为了其他可能编写类似错误并到达此页面的人的利益,这就是我做错了:
我在文件' myClass.hpp '中只有一个标题类,而空实现' myClass.cpp '。我的 CmakeLists.txt 引用了该实现,但我的实现并未包含 #include“myClass.hpp”。 Kdevelop-5.1.0中的效果是头文件没有被解析为程序的一部分 - 因此它的包含没有被读取,并且大部分代码都没有通过语义分析。
答案 1 :(得分:0)
尝试添加
include_directories(${SOURCE_FILES})
答案 2 :(得分:0)
看来我遇到了同样的问题。 症状: -Kdevelop 5.1.2找不到一些#includes;它们在源文件中带有下划线。 -建立项目没有问题 原因: -符号链接和原始* .h文件都在指定的路径中 CMakeLists.txt中的include_directories()。删除符号链接可解决此问题。
Kdevelop可能会混淆多个具有相同名称的* .h文件。 也许将来的某些Kdevelop版本将能够识别出它仅在处理一个目标。
答案 3 :(得分:0)
在KDevelop 5上,这解决了我的问题: