如何方便地强制 CMAKE 使用特定版本的静态库文件?
Posted
技术标签:
【中文标题】如何方便地强制 CMAKE 使用特定版本的静态库文件?【英文标题】:How to conveniently force CMAKE to use a particular build of static library file? 【发布时间】:2018-09-20 01:29:34 【问题描述】:我目前在 \usr\local 中安装了一个开源的第 3 方库 A。现在我想对该库进行一些代码更改,但我想在本地文件夹中进行此测试,这样它就不会影响系统库。让我们将本地构建称为 A'。
我有一个可执行文件 B,它使用库 A 作为静态库。在 CMakelists.txt 中,它使用 find_pacakge(A) 来查找安装在 \usr\local 中的那个。让它链接到本地文件夹中的 A' 的最简单方法是什么?
我发现如果我将 A' 安装到本地文件夹(或任何不同于 usr\local 的文件夹),我们可以强制 CMAKE 使用 HINTS 在该文件夹中查找包。但是,我希望有更好的方法,甚至无需安装。后 所有,A 和 A' 使用相同的头文件,只是位于不同的位置。所以我认为 include_directories 不需要更改。但我不知道如何将库链接到指定文件夹中的指定文件,而不是从 find_package 找到的默认系统文件夹。
真的是 Cmake 的新手,我希望我说清楚了。非常感谢
【问题讨论】:
【参考方案1】:1) 通常你把所有东西都拿走,即不包括这里和那里的库,在现代 CMake 中你也可以使用 target_include_directory()
所以包括和库是“耦合”在一起的,即你通过一个 find_package()
调用得到所有东西。
参考:https://cmake.org/cmake/help/latest/command/target_include_directories.html
2) 看看CMAKE_PREFIX_PATH
,如果你想找到 A' 而不是 A,这是修改默认搜索路径的正确方法>
参考:https://cmake.org/cmake/help/latest/variable/CMAKE_PREFIX_PATH.html
3) 如果你想使用 A' 的构建目录,那么 CMake 项目 A' 必须使用“export()”,这样你就可以直接从 buildir 中使用它。 注意:很少有项目支持它,正确的方法是先安装(在本地文件夹中)然后使用它。 参考:https://cmake.org/cmake/help/latest/command/export.html
【讨论】:
谢谢。还有一个问题:当我查看find_package()
使用的 ConfigXXX.cmake 时,我可以看到输出只有包含文件夹和目标名称。没有实际的库文件位置。我想知道 Cmake 在哪里以及如何计算出从目标名称到系统文件夹中 .a 文件的实际映射。以上是关于如何方便地强制 CMAKE 使用特定版本的静态库文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何强制 CMake 使用系统上安装的特殊版本的 Protobuf?
如何强制 cmake 在没有完整路径的情况下使用 cl.exe?