在 CMake 中链接 SFML,从源代码编译

Linking SFML within CMake, compiling from sources

我正在尝试将 SFML 作为依赖项包含在我的 CMake 项目中,它可以很好地编译 SFML,但我不知道如何 link 它。

这是我的 CMakeLists.txt,带有注释的评论:

cmake_minimum_required(VERSION 3.9.1)
set(CMAKE_LEGACY_CYGWIN_WIN32 1)
set (CMAKE_CXX_STANDARD 11) # Set C++11
project(CHIP8)

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) # static library
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) # dynamic library
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # executables
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/modules" ${CMAKE_MODULE_PATH})

# Include SFML
add_subdirectory(${CMAKE_SOURCE_DIR}/dep/SFML)
include_directories(${CMAKE_SOURCE_DIR}/dep/SFML/include)

#Include where to find headers
include_directories(./src)
include_directories(./src/headers)

# Do a GLOB search, and add them to executable
set(EXECUTABLE_NAME "CHIP8")
file(GLOB SRC_FILES
    "src/headers/*.h"
    "src/*.cpp"
)

add_executable(${EXECUTABLE_NAME} ${SRC_FILES})
target_link_libraries(${EXECUTABLE_NAME} SFML) #Here is where the problem lies!

如您所见,我正在添加子目录 ./dep/SFML,以便它使用自己的 CMakeLists 进行编译。在下一行也包括 headers,VSCode 接手。

但是,我在最后一行遇到了问题:target_link_libraries。它找不到 sfml SFMLSFML2。因此,我不确定如何 link 它。

有人知道吗?

谢谢。

SFML 不是一个单独的库,而是一组库,每个库都对应一些组件。对于名为

的组件
<component-name>

库目标已命名

sfml-<component-name>

在您的代码中使用 SFML 时,您应该知道您使用了哪些 SFML 组件(参见 SFML docs/tutorials),以及 link 和相应的库:

# Assuming you use "graphics" and "system" SFML components
target_link_libraries(<your-executable> sfml-graphics sfml-system)

请注意,此类目标的命名没有正式记录,因此将来可能会更改。

link 使用 SFML 的首选方法是在配置项目之前(或期间)安装它,然后使用

find_package(SFML REQUIRED COMPONENTS graphics system)
include_directories(${SFML_INCLUDE_DIR})
target_link_libraries(<your-executable> ${SFML_LIBRARIES})