无法理解cmake find_package行为

时间:2019-01-30 18:52:30

标签: c++ cmake

我正在使用cmake find_package查找安装在两个位置的软件包,一个安装在系统路径(/ usr / lib),另一个安装在我的自定义路径(/ my / custom / path / lib)。 我想找到一个为自定义路径上的一个,对于我只需要做到以下几点:

cmake .. -DCMAKE_PREFIX_PATH=/my/custom/path

但是我通过此命令得到的是系统上安装的命令。

但是,如果我将默认cmake模块路径上的FindMyPackage.cmake脚本复制到另一个文件夹并使用它,则找到的库就是自定义路径中的库(所需的库),如下所示:< / p>

cmake .. -DCMAKE_PREFIX_PATH=/my/custom/path -DCMAKE_MODULE_PATH=/path/to/copy/of/script

有人可以向我解释为什么会这样吗?以及如何指示cmake在不指定自定义FindXXX.cmake脚本的情况下仅找到自定义项?

请注意,我想不编辑CMakeLists.txt而仅使用cmake标志来完成此操作,而不是在find_package()函数上添加NO_ *选项不是理想的解决方案,因为我想使用系统1或自定义系统1外部状态,我不希望为编辑cmake的脚本。

谢谢 努诺


更新

脚本是FindProtobuf.cmake,在我看来这是一个版本问题...较新的版本使用select_library_configurations,而旧版本则没有,因此我的自定义路径是debug系统是release ...,我认为在旧版本所使用的第一个是释放一个。在我的模块路径上,我得到了从发行版中区分调试的最新版本,如果我的项目处于调试状态,则选择了正确的库...这似乎没有问题:(但这不容易找到或理解不...

0 个答案:

没有答案