CMAKE顶级项目有两个依赖项目,一个孩子也取决于另一个孩子
我的项目在顶部。
项目A要求库B和图书馆C。
库B也需要库C本身。
因此,简而言之。如何通过链接B将库b和c链接到A? 我现在可以通过单独链接所有图书馆来工作,但是我觉得我可以摆脱冗余。
这是Project A顶部的CMAKE的一部分:
find_package(libB REQUIRED)
include_directories(${libB_INCLUDE_DIR})
target_link_libraries(${PROJECT_NAME} ${libB_LIBRARY})
find_package(libC REQUIRED)
include_directories(${libC_INCLUDE_DIR})
target_link_libraries(${PROJECT_NAME} ${libC_LIBRARY})
但是在Libb中,我在其CMAKE中有一个:
find_package(libC REQUIRED)
include_directories(${libC_INCLUDE_DIR})
target_link_libraries(${PROJECT_NAME} ${libC_LIBRARY})
我觉得有一种更好的方法可以做到这一点,请告诉我。谢谢您的任何帮助。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用
target_include_directories
( include_directories 为当前目录的所有目标指定它们。除其他外,这还使提供可见性指定的能力包括DIRS,其中控制您的包含DIRS是否仅影响当前目标(private
),只有那些目标链接到您的目标(接口
)或两个(public
)。target_link_libraries
类似地使用了相同的指定符。因此,您可以使用
public
避免复制您的lib c包含和库,并且由于它是默认的规范符,因此可以省略它。然后,您的一部分cmakelists可能看起来像这样:在a a a a cmakelists.txt中:
在lib b b cmakelists.txt中:
如果您,例如,例如,只想lib b链接到lib c,但请留下公开的“继承”,包括目录,,包括目录,,,您可以更改lib b cmakelists的最后一行。txt摘录:
You can use
target_include_directories
(documentation) to specify include directories for your target instead of specifying them for all targets of the current directory usinginclude_directories
. Among other things, this gives the ability to provide visibility specifiers to your includes dirs, which control whether your include dirs will affect only current target (PRIVATE
), only those targets which link to your target (INTERFACE
) or both (PUBLIC
). The same specifiers are used similarly fortarget_link_libraries
.So, you can use
PUBLIC
to avoid duplicating your lib C includes and libraries, and since it is the default specifier, you can omit it. Then, parts of your CMakeLists may look like this:In project A CMakeLists.txt:
In lib B CMakeLists.txt:
If you, e.g., want only lib B to link to lib C, but leave public 'inheritance' of include directories, you could change the last line of lib B CMakeLists.txt excerpt: