美文网首页Cmake学习
Cmake 静态库链接静态库

Cmake 静态库链接静态库

作者: Tooosky | 来源:发表于2020-01-16 10:08 被阅读0次

    问题描述

    我编译了一个静态库B,它依赖了静态库A,同时在CMakeLists.txt使用target_link_libraries(B A) 设定了B链接A,但是当我在使用B时,发现静态库B中并没有A的内容。

    B-->A
    

    也就是说,cmake并没有帮我把静态库A的内容加到静态库B中!!!!

    经过查找资料,cmake确实不会合并两个静态库,那么问题来了,如何让cmake帮我把静态库合并成一个。

    答案

    通过生成后事件,自己合并。

    对静态库的合并操作,windows可以通过lib.exe程序,linux可以通过arranlib程序达到目的。

    windows下:

    add_custom_command(TARGET examplelib POST_BUILD
                                COMMAND lib.exe /out:tmp.lib B.lib A.lib
                                COMMAND ${CMAKE_COMMAND} -E rename tmp.lib B.lib
                                )
                                
    

    linux下:
    linux并不能直接将两个.a文件合并,必须先把.a拆成.o文件,再把所有.o文件合并在一起

    add_custom_command(TARGET examplelib POST_BUILD
                                COMMAND ar x libA.a
                                COMMAND ar x libB.a
                                COMMAND ar cru libB.a *.o
                                COMMAND ranlib libB.a
                                )
    
    

    需要注意,上方代码只是讲述了原理,实际使用还需要注意文件的路径问题。

    相关文章

      网友评论

        本文标题:Cmake 静态库链接静态库

        本文链接:https://www.haomeiwen.com/subject/jbqfzctx.html