当处理依赖于多个静态库的项目时,将这些库合并到一个内聚单元中变得至关重要。 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 实用程序达到相同的目的:
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中文网其他相关文章!