首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  C

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

  •  
  •   ncwhale · 311 天前 · 891 次点击
    这是一个创建于 311 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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


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


    @baixiangcpp CMake 文档看完一头雾水才来提问的,不如给个栗子喵?
        5
    icylogic   295 天前
    不折腾 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) 这样用了。
        6
    icylogic   295 天前
    v2ex 这编辑器怎么和知乎的垃圾编辑器一样,连行首空格都保留不下来啊
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2839 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 34ms · UTC 12:23 · PVG 20:23 · LAX 04:23 · JFK 07:23
    ♥ Do have faith in what you're doing.