在linux上为CMake的find_package()指定其他链接目录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在linux上为CMake的find_package()指定其他链接目录相关的知识,希望对你有一定的参考价值。

我正在尝试使用CMake的find_package()命令链接库(SFML)。如果我将SFML的库直接放入/ usr / local / lib文件夹,一切正常,但只要我创建一个子文件夹(出于组织目的),我就会收到以下错误:

CMake Error at cmake_modules/FindSFML.cmake:355 (message):
  Could NOT find SFML (missing: SFML_GRAPHICS_LIBRARY SFML_WINDOW_LIBRARY
  SFML_SYSTEM_LIBRARY)
Call Stack (most recent call first):
CMakeLists.txt:11 (find_package)

然后我尝试搜索指定新目录(顺便说一下,只是/ usr / local / lib / SFML)到find_package()函数的方法,但我发现的任何东西似乎都不起作用。

CMakeLists.txt

# initialize project
cmake_minimum_required(VERSION 3.10.0)
project(Proj)

# compiler flags
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# load packages
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules)
find_package(SFML REQUIRED COMPONENTS graphics window system)

# headers directories
include_directories(${SFML_INCLUDE_DIR})

# project directories
include_directories(headers)

# project sources
file(GLOB SRC src/*.cpp)

# create exectuables
add_executable(Proj ${SRC}) 

# link libraries
target_link_libraries(Proj ${SFML_LIBRARIES} ${SFML_DPENDENCIES})
答案

在“查找”脚本之外,CMake不支持指定其他库的子目录。但是您可以通过CMAKE_LIBRARY_PATH变量指定精确的库目录:

set(CMAKE_LIBRARY_PATH "/usr/local/lib/SFML")
find_package(SFML ...)

实际上,变量CMAKE_LIBRARY_PATH会影响find_library调用,但大多数“查找”脚本都会使用此命令搜索库。

以上是关于在linux上为CMake的find_package()指定其他链接目录的主要内容,如果未能解决你的问题,请参考以下文章

cmake find_package脚本只能在Linux上失败

Cmake中find_package命令的搜索模式之模块模式(Module mode)

Cmake中find_package命令的搜索模式之配置模式(Config mode)

find_package的默认搜索路径是什么( )使用cmake时的功能?

CMake中find_package的使用

find_package()的查找*.cmake的顺序