如果我有一个包含公共头文件的库,这些文件被另一个库的公共头文件使用,我如何将前一个库的公共头文件公开给第三个应用程序,该应用程序仅依赖于后一个库,而不显式添加前一个库的头文件的路径到应用程序的 target_include_directories 部分?
我知道这有点令人困惑,这是一个简单的例子:
我在同一个 cmake 项目中有两个共享库和一个应用程序:
library_foo 有一个包含其公共头文件的目录library_bar还有一个包含公共头文件的目录。其中一个公共头文件 ( lib_bar/bar.h) 包含一个#include <lib_foo/foo.h>条目,即公共头文件具有对 中定义的公共头文件的引用library_foo。library_bar实现取决于library_foo.app仅直接取决于library_bar.app'smain.cpp包含一个#include <lib_bar/bar.h>.所以,app 也间接依赖于library_foo它的头文件。
我想为我的应用程序的这三个部分编写三个 CMakeLists.txt 文件。在app我的 CMakeLists.txt 中,我只想指定依赖于library_bar,即libarary_foo在library_barCMakeLists.txt中指定的库和头文件依赖必须转移到app. 我怎样才能做到这一点?我想使用target_*解决方案。
命令target_include_directories正是用于继承的目的:
add_library(library_foo SHARED ...)
# Include directories are made an interface of 'foo'.
target_include_directories(library_foo PUBLIC <dir-with-lib_foo/foo.h>)
add_library(library_bar SHARED ...)
target_include_directories(library_bar PUBLIC <dir-with-lib_bar/bar.h>)
# Linking with 'foo' propagates include directories
# and makes these directories an interface of 'bar' too.
target_link_libraries(library_bar library_foo)
add_executable(app ...)
# Application will use include directories both from 'bar' and 'foo'.
target_link_libraries(app library_bar)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2963 次 |
| 最近记录: |