kbore
kbore
请问作者, FooConfig.cmake的内容是靠 install(export) 自动生成的吗? 我想将这部分内容从手写改为cmake自动生成, 但是无法处理区分链接 动态库或静态库的需求, 导致只能手写Findxxx.cmake文件.
拜读过 #137 ,但是那样生成的 cmake config 文件应该不支持区分静态库或者动态库, 而且动态库和静态库是两个 cmake config 文件. 不知作者是否有研究过如何将动态库和静态库合并导出一个 cmake config 文件让其他人引用? 目前我是手写的, 正在找有没有自动生成的方法.
比如静态库是 foo 而动态库是 fooShared,这样的话,编译一次就可以自动生成一个 find config -- 请问这步是如何实现的? 我理解成是写成下面这样的代码, 这样会生成2个find config. ```CMAKE install(TARGETS foo EXPORT myfooLib) install(EXPORT myfooLib) install(TARGETS fooShared EXPORT myfooSharedLib) install(EXPORT myfooSharedLib) ```
这两天我试了下, 按照您给的建议, 已经将动态库和静态库合一安装, 其他 project 也能正常引用到. 说来也巧, **真的是因为这篇文章独立的标题** 我才能检索到这的, 再次感谢下. 另外, 关于安装部分有个问题想再请教下. 假设下面这种场景 1. library A 是一个单独的 build tree, 它依赖另一个 import target B(也属于 library A 的 build tree). 2. binary...
> hh,挺巧 > > 你说这个问题没遇到过,目前除了你说的,没有更好的办法了 周末检索各种资料确认了下, CMake官方的态度是这类第三方依赖应该downstream提前安装好, upstream在 `myLibConfig.cmake.in` 中写明依赖项即可. 根据我自己的工程实践, 觉得使用上还是麻烦了点, 尤其是一些闭源的场景. 目前的解决方案是在 `myLibConfig.cmake.in` 做文章, 根据需要导出的target清单自动重写了imported target的依赖, 感觉可以接受了. 不管怎样, 感谢作者的博客和答疑, 帮我解决了很大的困惑.
is this feature added?
> A PHP Error was encountered > Severity: Notice > > Message: Undefined index: setup > > Filename: controllers/Install.php > > Line Number: 9 > > Backtrace: > > File:...
我也有些关于Makefile的意见, 请问是在这个 issue 合并讨论还是另开 issue. - 编译出的动态库后缀不对(仍然是.a). - -fvisibility=hidden 建议暂时关闭, 除非已动态 export 所有对外接口. 静态库使用该参数似乎没啥意义. - 缺少 make install 功能(不方便cmake工程导入). - 缺少 soname(对工程导入cmake有一些影响). - librtsp/source/server/aio 代码没有进入rtsp库编译. - 增加strip符号表功能 除了第2点fvisibility=hidden的问题, 我不知道作者要export哪些接口, 只是临时关闭了该功能....
> 目前都是已静态库方式提供,哪个项目需要编译动态库? 我个人嵌入式项目想集成作者的媒体库, 习惯性会使用动态库. > -fvisibility=hidden 用于动态库,默认情况下不导出任何函数,除非头文件中定义了visible或者定义map文件。 是的, 我看头文件中也没有设置接口的可见性, 直接编译动态库出来应该没办法使用. 我个人也喜欢默认隐藏所有符号, 手动导出对外API. 因此是否先屏蔽该编译参数, 在所有接口显示设置可见性后才放开该参数. 目前我仅看了mpeg库, 感觉只有mpeg-ts.h和mpeg-ps.h和若干宏是需要导出的, 其他include文件夹下的文件(API)感觉属于内部API. > 协议代码默认都不包含网络处理部分, aio代码在test中编译,这是特意设计的。 了解.
> > 我个人嵌入式项目想集成作者的媒体库, 习惯性会使用动态库. > > 对嵌入式不太了解,如果需要编译动态库,可以参考sdk/libaio的makefile文件, 在这个项目中,使用map文件导出需要的函数。 > > ``` > include $(ROOT)/gcc.mk > > CFLAGS += -fvisibility=default > LDFLAGS += -Wl,--version-script=libaio.map > ``` > > 如上,在include gcc.mk文件后,可以修改visibility为default 怎么让符号可见,...