如果我有一个库,其中包含公共头文件,被另一个库的公共头文件使用,那么如何将前者库的公共头目录暴露给仅依赖于后者库的第三方应用程序,而不需要显式地将前者库的头文件路径添加到应用程序的target_include_directories部分?
我知道这有点混乱,下面是一个简单的例子:
我在同一个cmake项目中有两个共享库和一个应用程序:
- library_foo有一个包含其公共头文件的目录 - library_bar也有一个包含其公共头文件的目录。其中一个公共头文件(lib_bar/bar.h)包含#include 条目,即公共头文件引用了library_foo中定义的公共头文件。 - library_bar的实现依赖于library_foo。 - 应用程序直接仅依赖于library_bar。 - 应用程序的main.cpp包含#include 。
因此,app间接依赖于library_foo及其头文件。
我想为我的应用程序编写三个CMakeLists.txt文件。在app的CMakeLists.txt中,我只想指定对library_bar的依赖关系,即在library_bar CMakeLists.txt中指定的来自libarary_foo的库和头依赖关系必须传递到app。我该怎么做?我想使用target_*解决方案。
我知道这有点混乱,下面是一个简单的例子:
我在同一个cmake项目中有两个共享库和一个应用程序:
- library_foo有一个包含其公共头文件的目录 - library_bar也有一个包含其公共头文件的目录。其中一个公共头文件(lib_bar/bar.h)包含#include 条目,即公共头文件引用了library_foo中定义的公共头文件。 - library_bar的实现依赖于library_foo。 - 应用程序直接仅依赖于library_bar。 - 应用程序的main.cpp包含#include 。
因此,app间接依赖于library_foo及其头文件。
我想为我的应用程序编写三个CMakeLists.txt文件。在app的CMakeLists.txt中,我只想指定对library_bar的依赖关系,即在library_bar CMakeLists.txt中指定的来自libarary_foo的库和头依赖关系必须传递到app。我该怎么做?我想使用target_*解决方案。
target_include_directories
也适用于INTERFACE库。 - Tsyvarev