【问题标题】:Adding headers to a library in CMake在 CMake 中向库中添加标头
【发布时间】:2013-07-07 10:08:51
【问题描述】:

我有不少这样的库:

libs

     \lib1-- src
          \- include

      \lib2--src
           \- include

其中 lib2 需要 lib1。我这样做的方法是做这样的事情:

lib2/CMakeLists.txt: 
    include ../lib1/include
    target_link_libraries(lib2 lib1)

如何在 lib2 库中包含 lib1 头文件/包含文件? 我目前正在尝试执行此操作,但在编译过程中出现 lib2 找不到 lib1 头文件的错误。

libs/CMakeLists.txt:

file(GLOB lib1_src
    "lib1/src/*.cc"
 )

#header files
file (GLOB lib1_h
    "lib1/include/*.h"
 )


file(GLOB lib2_src
    "lib2/src/*.cc"
 )

#header files
file (GLOB lib2_h
    "lib2/include/*.h"
 )

add_library(lib1 ${lib1_src} ${lib1_h})
add_library(lib2 ${lib2_src} ${lib2_h})
target_link_libraries(lib2 lib1)

我可以通过将 include_directories(lib1/include) 添加到 libs/CMakeLists.txt 来使其工作,但我已经到了一个库需要 3 个其他库的地步,每个库需要 3 个其他库,等等,这变得非常乏味。

【问题讨论】:

  • 是否存在 libA/include 的标头与 libB/include 同名但内容不同的情况?
  • 酷,那么我建议的(现在已接受,谢谢)解决方案应该可以正常工作。

标签: c++ c compilation cmake


【解决方案1】:

当您有这样一个重复的文件夹结构时,创建一个自动处理此类内容的宏通常会很方便。

MACRO(ADD_SUBLIB libname)
  #Compute required sources
  file(GLOB sublib_sources "${libname}/src/*.cc")

  #Create library
  ADD_LIBRARY(${libname} SHARED ${sublib_sources})

  #add this library's header folder to the global include set
  INCLUDE_DIRECTORIES("${libname}/include")

ENDMACRO(ADD_SUBLIB)

#Call macro once per library
ADD_SUBLIB(lib1)
ADD_SUBLIB(lib2)
ADD_SUBLIB(lib3)

#Sample executable, who as a side effect of the macro calls will 
# be able to include.
ADD_EXECUTABLE(myprog main.cpp)

#Link any of the created libraries
TARGET_LINK_LIBRARIES(myprog lib1 lib2 lib3)

【讨论】:

  • 谢谢,这真的很有用。
猜你喜欢
  • 1970-01-01
  • 2021-11-21
  • 2021-12-25
  • 2023-03-09
  • 2015-03-10
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
相关资源
最近更新 更多