我可以在CMake find_library中使用任何模糊搜索技巧吗



我的动机来自于此:我想找到一个名为libboost_python38的库,所以,如果我像这样使用find_library命令,我找不到库:

find_library(USD_BOOST_PYTHON boost_python HINTS ${USD_LIBRARY_DIRECTORY})

只有当我使用此命令时,才能找到库:

find_library(USD_BOOST_PYTHON boost_python38 HINTS ${USD_LIBRARY_DIRECTORY})

这种方法会使我的cmake文件失去一些跨平台的功能,所以我希望通过一些模糊搜索方法来搜索这个库。我能用更好的方法吗?

没有特别的,但您可以使用NAMES参数,并传递一些find_library应该查找的坦诚名称,请参阅此处。您还可以提供一些不同的PATHPATH_SUFFIXES,这可能会有所帮助。

如果您仍然需要更多的逻辑来查找库,那么您很可能需要在find_library调用之前处理这些逻辑,例如,预先得出库的名称,将其放入变量中,并将其作为库的名称传递给find_library

不要将find_library用于此目的。相反,要利用boost附带cmake配置脚本的事实,并使用find_package

find_package(Boost REQUIRED COMPONENTS python)
target_link_libraries(my_target PRIVATE Boost::python)

这还有一个额外的好处,即任何依赖项都会自动添加到my_target中,并附带必要的include目录。

如果您已将软件包安装到默认位置,则不需要其他信息。如果您自己构建了boost并将其安装到非标准位置,则可能需要提供有关安装位置的信息,例如将安装位置添加到CMAKE_PREFIX_PATH

注意:find_package有额外的参数,允许您根据需要限制可接受的增强版本。

最新更新