Cmake:覆盖子目录链接模式以LINK_PRIVATE



我有一个相当大的第三方cmake目录作为我的项目的一部分,我的一些项目依赖于它。我使用 add_subdirectory() 将此目录导入我的依赖项目。不幸的是,这也会将第三方项目链接到的库导入到我的项目中。

我能够通过在 target_link_libraries() 命令的第三方目录的 cmakelists.txt 文件中指定LINK_PRIVATE来手动解决此问题。我更愿意使用 set_property 或类似方法从 cmakelist 中远程执行此操作。

这可能吗?

一般来说,当使用add_subdirectory时,这种影响很难控制。除了构建目标之外,您还可能对全局和缓存变量、测试和其他地方产生类似的污染影响,这就是为什么我不建议将此方法用于第三个库依赖项。

外部项目模块提供了一种更简洁的方法。这为您提供了一个命令ExternalProject_Add,可用于使用 CMake(或其他生成系统)配置和构建第三方库。这里的优点是库的 CMake 运行完全独立于您自己的运行,因此没有污染影响。缺点是该库中的目标不会自动导入到您自己的项目中,因此您可能需要一些额外的粘合代码才能将它们重新导入。不过,总的来说,这应该是一个更干净的方法。

最新更新