无法在Cmake的另一个标头中包含外部库

时间:2014-05-13 09:10:49

标签: c++ cmake

我有一个项目设置,其中包含以下文件夹结构:

  • 外部
    • 升压
    • 波索
    • 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 / lexical_cast.hpp等提升标头时,会出现问题。 当我在lib1.cpp中包含它时,一切都会编译。但是当我在lib1.h中做同样的事情时,我得到错误:boost / lexical_cast.hpp:没有这样的文件或目录。

有谁知道如何解决这个问题?

提前致谢

1 个答案:

答案 0 :(得分:3)

将我的评论转化为答案

#include "boost/..."文件中.h时,请确保使用该.h文件的所有项目都已正确配置为使用Boost。请记住,从编译器的角度来看,.h文件并不存在 - 它们的内容以文本方式粘贴到.cpp文件中,因此只有.cpp文件的设置(例如包括路径)适用。