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

2019-01-31 23:56:36 +08:00
 ncwhale

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

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

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

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


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


@baixiangcpp CMake 文档看完一头雾水才来提问的,不如给个栗子喵?
icylogic
2019-02-17 19:10:54 +08:00
不折腾 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
2019-02-17 19:12:10 +08:00
v2ex 这编辑器怎么和知乎的垃圾编辑器一样,连行首空格都保留不下来啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/532293

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX