不能使用 Cmake 在另一个标头中包含外部库

Can't include an external library in another header with Cmake

本文关键字:包含外 另一个 Cmake 不能      更新时间:2023-10-16

我有一个项目设置,文件夹结构如下:

  • 外部
    • /ul>
      • Lib1
        • src
          • lib1.cpp
        • CMakeLists.txt
      • Lib2
        • src
        • CMakeLists.txt
    • 项目
      • Project1
        • src
        • CMakeLists.txt
      • 项目
        • src
        • CMakeLists.txt
    • 公共
      • Lib1
        • lib1.h
      • Lib2

    基本上我有一个文件夹的外部库,如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文件的设置(例如包含路径)适用。