如何确定哪个cmake包包含所需的静态库?

时间:2017-07-29 16:59:20

标签: cmake

我有一些遗留代码(针对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等)。

1 个答案:

答案 0 :(得分:0)

  

给定一些已知的库,如何找到包含它们的相关cmake包?

如果存在相应的CMake包,它通常具有类似于库名称的名称。

请注意, CMake包对于库来说不是容器(例如发行版包,例如mysql-devel)。 CMake包只是脚本找到库。

缺少脚本并不意味着没有图书馆本身;这意味着......没有人写过这样的剧本。没什么。