首页 > 后端开发 > C++ > 如何使用 CMake 将多个静态库合并为一个?

如何使用 CMake 将多个静态库合并为一个?

DDD
发布: 2024-12-03 05:29:09
原创
460 人浏览过

How Can I Merge Multiple Static Libraries into One Using CMake?

使用 CMake 将静态库合并为一个

当处理依赖于多个静态库的项目时,将这些库合并到一个内聚单元中变得至关重要。 CMake 为这一挑战提供了强大的解决方案,消除了下游依赖项维护的需要。

问题

直接使用 target_link_libraries 组合静态库的尝试通常会失败。但是,当组合库用作可执行文件的依赖项时,CMake 似乎会自动合并库。

解决方案

可以采用自定义目标来实现所需的结果:

add_custom_target(combined
        COMMAND ar -x $<TARGET_FILE:a>
        COMMAND ar -x $<TARGET_FILE:b>
        COMMAND ar -qcs ${C_LIB} *.o
        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
        DEPENDS a b
        )
登录后复制

此目标从各个静态库中提取目标文件,并将它们组合成一个新的静态库。

变体使用libtool

如果需要,可以利用 libtool 实用程序达到相同的目的:

add_custom_target(combined
        COMMAND libtool -static -o ${C_LIB} $<TARGET_FILE:a> $<TARGET_FILE:b>
        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
        DEPENDS a b
        )
登录后复制

结论

虽然看起来应该有一种更简单的方法,但这自定义目标有效地将静态库合二为一。不用说,这种技术简化了依赖管理并确保将组合库无缝交付给下游消费者。

以上是如何使用 CMake 将多个静态库合并为一个?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板