gpt4 book ai didi

c++ - 将 header 添加到 CMake 中的库

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:15 25 4
gpt4 key购买 nike

我有很多看起来像这样的库:

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 个,等等,这变得非常乏味。

最佳答案

当您有像这样的重复文件夹结构时,创建一个自动执行此类操作的宏通常很方便。

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)

关于c++ - 将 header 添加到 CMake 中的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17554377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com