【问题标题】:Specify additional link directories for CMake's find_package() on linux在 linux 上为 CMake 的 find_package() 指定额外的链接目录
【发布时间】:2018-08-11 20:07:33
【问题描述】:

我正在尝试使用 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 linker static-libraries


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      相关资源
      最近更新 更多