我有一些遗留代码(针对mysql嵌入式服务器库构建),其中包含一个如下所示的链接:
-L/usr/local/lib -lmysqld -lm -ldl -lcrypt -lpthread
我知道我可以使用cmake --help-module-list
获取支持的cmake模块列表,但是如何知道哪些模块包含库libm.a,libdl.a等?
我知道我可以使用link_directories(/usr/local/lib)
来指定该位置,只需将-lm,-ldl等放入我的target_link_libraries
命令中,但文档似乎不鼓励 - 使用{ {1}}或find_library
是可取的。
我可能会混淆使用find_library来处理所有目标平台的东西,但是如果已经在现有的包中定义了这些库,我认为这将是最理想的方法。
所以,一般的问题是:给定一些已知的库,如何找到包含它们的相关cmake包?
编辑:关于我的要求似乎有些混乱。我知道find_package
实际上并不“包含”这些库,但它可以作为独立于平台的方式来定位库以进行常见配置。例如,在上面的例子中,我在another SO question中发现我可以使用这种结构来处理pthread库:
find_package
但我怎么知道这个?有没有办法我可以为自己发现这个问题,而不是问问题,希望有人可以为我解答?我应该将什么用于其他库(m,dl,crypt等)。
答案 0 :(得分:0)
给定一些已知的库,如何找到包含它们的相关cmake包?
如果存在相应的CMake包,它通常具有类似于库名称的名称。
请注意, CMake包对于库来说不是容器(例如发行版包,例如mysql-devel
)。 CMake包只是脚本,找到库。
缺少脚本并不意味着没有图书馆本身;这意味着......没有人写过这样的剧本。没什么。