c++ - 无法理解 cmake find_package 行为
问题描述
我正在使用 cmake find_package 来查找安装在两个位置的包,一个在系统路径 (/usr/lib) 上,另一个在我的自定义路径 (/my/custom/path/lib) 上。我想要找到的是自定义路径上的那个,因为我只想执行以下操作:
cmake .. -DCMAKE_PREFIX_PATH=/my/custom/path
但我用这个命令得到的是系统上安装的那个。
但是,如果我将默认 cmake 模块路径上的 FindMyPackage.cmake 脚本复制到另一个文件夹并使用它,那么找到的库就是自定义路径中的库(所需的库),如下所示:
cmake .. -DCMAKE_PREFIX_PATH=/my/custom/path -DCMAKE_MODULE_PATH=/path/to/copy/of/script
有人可以解释一下为什么会这样吗?以及如何在不指定自定义 FindXXX.cmake 脚本的情况下指示 cmake 仅查找自定义项而不是系统项?
请注意,我想在不编辑 CMakeLists.txt 的情况下完成此操作,仅使用 cmake 标志,在 find_package() 函数上添加 NO_* 选项不是理想的解决方案,因为我想根据外部状态使用系统之一或自定义的我不想为此编辑 cmake 脚本。
谢谢努诺
更新
脚本是 FindProtobuf.cmake,在我看来这是一个版本问题......新版本使用 select_library_configurations 而旧版本没有,所以我的自定义路径是调试系统正在发布......我认为在旧版本上使用的第一个是发行版。在我的模块路径上,我得到了将调试与发布区分开来的最新版本,如果我的项目处于调试状态,则选择正确的库......这似乎没有问题:(但这不容易找到或理解不......
解决方案
推荐阅读
- r - 绘图导致“错误:维数不正确”
- spring - Spring Data Redis - StreamMessageListenerContainer 只产生一个线程
- memory-leaks - 为什么在一个简单的 OCaml 程序中 valgrind 会出现内存泄漏?
- java - 不好:Java 反混淆堆栈跟踪
- javascript - React:在父构造函数中将子组件存储为 this.child - 这是一个坏主意吗?
- material-design-in-xaml - material-design-in-xaml 中 ComboBox 样式的问题
- python - 脚本在 Pycharm 中运行,但在没有退出代码的情况下完成
- apk - 如何使用 Tizen Studio 将 APK 转换为 TPK
- javascript - Javascript:您将如何创建一个可以通过沿轴滑动节点来修改的 blob
- arrays - Laravel 雄辩,其中定义的值介于数据库中的 json 范围值之间