ncwhale
V2EX  ›  C

弄了个 CPP 工具库,求教 CMake 部分配置问题喵~

  •  
  •   ncwhale · Jan 31, 2019 · 3416 views
    This topic created in 2663 days ago, the information mentioned may be changed or developed.

    为了 ~~创作新轮子~~ 更好的让 asio 和 fiber 配合工作的一个小工具库:lib asio fiber

    现在有个疑问: CMakeLists.txt 里面要怎么配置才能变成一个 可发行 的 CPP 库喵?

    当然,现在作为 subtree 直接使用 CMake 包含是可行的喵…

    6 replies    2019-02-17 19:12:10 +08:00
    GeruzoniAnsasu
        1
    GeruzoniAnsasu  
       Feb 1, 2019   ❤️ 1
    感觉 c++之类的库有两种发行方式,一是单独编译成 lib 然后其它工程链接进去,另外是 header only 的库,把对应库复制进目标工程就行,这种 header only 的库有些会提供一个“编译”成单文件的成品(是的我就是在说 catch2 )
    thedrwu
        2
    thedrwu  
       Feb 1, 2019 via Android
    什么意思?
    除了一些依赖比较复杂,或者编译需要大量资源的库,其他的东西,比如你发的这个能用 git submodule 或者 subtree 带进项目里。
    baixiangcpp
        3
    baixiangcpp  
       Feb 1, 2019
    https://cmake.org 看文档啊
    ncwhale
        4
    ncwhale  
    OP
       Feb 1, 2019
    @thedrwu 我自己现在也是 subtree 直接带进去用的喵~


    @GeruzoniAnsasu 有一部分函数不支持 header only ,多次 include 后会出现编译时多重定义问题喵……


    @baixiangcpp CMake 文档看完一头雾水才来提问的,不如给个栗子喵?
    icylogic
        5
    icylogic  
       Feb 17, 2019
    不折腾 header only 就发布成头文件 + 动态库的形式啊。

    libfoo:

    include/
    interface.h
    src/
    impl.h
    impl.cpp
    cmake/
    fooConfig.cmake.in
    CMakeLists.txt

    CMakeLists.txt:
    add_library(foo)
    target_set_properties(foo PUBLIC_HEADERS include/interface.h)
    install(TARGETS foo
    LIBRARY DESTINATION lib
    PUBLIC_HEADERS DESTINATION include
    )

    然后 cpack 就可以了。大概是这样吧,准确的语法懒得查了。
    fooConfig.cmake.in 是用来让别人通过 cmake 引用你的库的,install 里把它放到 cmake dir,这样别人就可以直接 find_package(foo) 这样用了。
    icylogic
        6
    icylogic  
       Feb 17, 2019
    v2ex 这编辑器怎么和知乎的垃圾编辑器一样,连行首空格都保留不下来啊
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3779 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 04:41 · PVG 12:41 · LAX 21:41 · JFK 00:41
    ♥ Do have faith in what you're doing.