为了使CMake项目尽可能简单和可移植,我考虑将我需要的库的“整个”仓库添加到项目中。
项目结构如下:
所有第三方目录都是以下存储库的 git 子模块: https://github.com/KhronosGroup/Vulkan-Hpp https://github.com/SFML/SFML https://github.com/glfw/glfw 总结一下,我在将 Vulkan 和 SFML 库集成到项目中时遇到了问题。
我的项目/CMakeLists.txt 如下:
MyProject/
└──CMakeLists.txt
└──src/
└──MyProject/
└── *.h & *.cpp
└── CMakeLists.txt
└──ThirdParty/
└──Vulkan-Hpp/
└──(Vulkan Files)
└──glfw/
└──(glfw Files)
└──SFML/
└──(SFML Files)
所有第三方目录都是以下存储库的 git 子模块: https://github.com/KhronosGroup/Vulkan-Hpp https://github.com/SFML/SFML https://github.com/glfw/glfw 总结一下,我在将 Vulkan 和 SFML 库集成到项目中时遇到了问题。
我的项目/CMakeLists.txt 如下:
cmake_minimum_required (VERSION 3.8 FATAL_ERROR)
project ("MyProject")
set (MyProject_VERSION_MAJOR 0)
set (MyProject_VERSION_MINOR 2)
set (MyProject_VERSION_PATCH 1)
set (CMAKE_CXX_STANDARD 17)
# Include sub-projects.
add_subdirectory ("src/MyProject")
add_subdirectory ("ThirdParty/glfw")
add_subdirectory ("ThirdParty/SFML")
add_subdirectory ("ThirdParty/Vulkan-Hpp")
MyProject/src/MyProject/CMakeLists.txt:
cmake_minimum_required (VERSION 3.8 FATAL_ERROR)
project ("MyProject")
find_package(Vulkan REQUIRED FATAL_ERROR) # error
find_package(SFML REQUIRED network audio) # error
find_package(glfw REQUIRED FATAL_ERROR) # error
# Add source to this project's executable.
add_executable (MyProject "MyProject.cpp")
target_include_directories (MyProject
PUBLIC ${GLFW_INCLUDE_DIRS}
PUBLIC ${SFML_INCLUDE_DIR}
PUBLIC ${VULKAN_INCLUDE_DIRS}
)
target_link_libraries (MyProject glfw)
target_link_libraries (MyProject ${VULKAN_LIB_LIST})
target_link_libraries (MyProject ${SFML_LIBRARIES})
我该如何调整CMake以便在主要项目中使用第三方库?项目结构是否不正确?
FATAL_ERROR
不是find_package
的有效参数。我猜你也想在SFML
搜索中在network audio
之前传递COMPONENTS
参数。 - mathstuf