不能使用 Cmake 在另一个标头中包含外部库
Can't include an external library in another header with Cmake
我有一个项目设置,文件夹结构如下:
- 外部
- /ul>
- 库
- Lib1
- src
- lib1.cpp
- CMakeLists.txt
- src
- Lib2
- src
- CMakeLists.txt
- Lib1
- 项目
- Project1
- src
- CMakeLists.txt
- 项目
- src
- CMakeLists.txt
- Project1
- 公共
- Lib1
- lib1.h
- Lib2
- Lib1
基本上我有一个文件夹的外部库,如Poco或Boost。在它旁边我有一个项目文件夹。每个项目都有自己独立的源文件,并且可以在Libraries文件夹中包含/链接一个或多个库。每个库也有一个私有的src文件夹和一个公共的头文件夹。
库的CMakeLists.txt文件看起来像这样(${PUBLIC_DIRECTORY}被设置为正确的公共文件夹)
set(Sources "${PUBLIC_DIRECTORY}/lib1.h" "src/lib1.cpp" ) include_directories("../../External/Boost") add_library(Lib1 ${Sources}) link_directories("${CMAKE_CURRENT_BINARY_DIR}/Lib1")
当我尝试包含boost头(如boost/lexical_cast.hpp)时,问题就会发生。当我把它包含在lib1.cpp中时,一切都编译好了。但是当我在lib1.h中做同样的事情时,我得到了错误:boost/lexical_cast.hpp: No such file or directory.
有人知道如何解决这个问题吗?
thanks in advance
把我的评论变成答案
当您在.h
文件中#include "boost/..."
时,请确保使用该.h
文件的所有项目都正确配置为使用Boost。请记住,从编译器的角度来看,.h
文件并不真正存在—它们的内容以文本形式粘贴到.cpp
文件中,因此只有.cpp
文件的设置(例如包含路径)适用。
相关文章:
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- CMake 将库包含在另一个库中
- 包含来自另一个文件的函数会导致范围错误(openFoam)
- 如果标头包含在另一个标头中,但不包含 CPP,则静态断言
- 如何将 cpp 包含在另一个 cpp 中,例如复制粘贴而不是声明
- 查找一个阵列包含在另一个C++中的次数
- C++在xcode 8中包含来自另一个项目的头
- 为什么在 C++ 中,当对象包含在另一个对象中时,复制构造函数被调用两次
- 类模板包含在另一个类模板C 中
- 查找一个区域中未包含在另一个区域中的第一个元素
- 只有Arduino的第一个对象在包含在另一个对象的集合/数组中时会丢失其数据属性值
- 当包含在另一个向量中时,如何使用矢量包装程序类
- 包含引用另一个矢量内容的矢量的对象
- 如何有效地从该对象中包含的另一个对象访问对象字段/属性
- 如何在vc++中将命名空间包含在另一个项目的另一个文件中
- 将一个类作为成员变量包含在另一个类 (C++)
- 从映射中删除键不包含在另一个向量中的元素
- 包含来自另一个目录的标头时出现 Visual Studio 链接错误
- 当用c++编写数组时,我尝试将数组包含到另一个类中,但不起作用
- Eclipse CDT C/C++:包含来自另一个项目的头文件