我包括这样的glfw:
ExternalProject_Add(glfw-external
URL https://github.com/glfw/glfw/releases/download/3.2.1/glfw-3.2.1.zip
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/glfw
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/install
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
)
add_dependencies(ShittyLife glfw-external)
if(UNIX)
set(GLFW_LIB <What to put here?> libglfw3.a)
else()
set(GLFW_LIB ${install_dir}/lib/glfw3.lib)
endif()
Run Code Online (Sandbox Code Playgroud)
稍后使用GLFW_LIB变量链接lib.
它在Windows上运行良好,但在Linux上我缺少一些库.glfw网页提供了解决方案,但它们似乎都没有与ExternalProject_add的兼容性.
关于如何弄清楚所需的库是什么的任何想法,最好是以跨不同机器/发行版的方式工作?
如果它有用,这是我在尝试构建时遇到的错误:
相关位:
/usr/bin/ld: /home/molion/Desktop/ShittyLife/build/install/lib/libglfw3.a(x11_window.c.o): undefined reference to symbol 'XConvertSelection'
//usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line
Run Code Online (Sandbox Code Playgroud)
所有的:
[ 94%] Building CXX object CMakeFiles/ShittyLife.dir/src/main.cpp.o
[100%] Linking CXX executable ShittyLife
/usr/bin/ld: /home/molion/Desktop/ShittyLife/build/install/lib/libglfw3.a(x11_window.c.o): undefined reference to symbol 'XConvertSelection'
//usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/ShittyLife.dir/build.make:95: recipe for target 'ShittyLife' failed
make[2]: *** [ShittyLife] Error 1
CMakeFiles/Makefile2:68: recipe for target 'CMakeFiles/ShittyLife.dir/all' failed
make[1]: *** [CMakeFiles/ShittyLife.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
GLFW提供了一个CMake配置文件包,因此您应该使用find_package
它来查找它.
但由于这只在ExternalProject_Add
运行后才可用,而不是在配置时,你必须创建一个超级项目并将你自己的项目添加为ExternalProject,如下所示:
ExternalProject_Add(glfw-test
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
INSTALL_COMMAND ""
CMAKE_CACHE_ARGS "-DCMAKE_PREFIX_PATH:STRING=${GLFW_INSTALL_PREFIX}/lib/cmake"
DEPENDS glfw-external
)
Run Code Online (Sandbox Code Playgroud)
用set(GLFW_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/glfw_install")
和GLFW_INSTALL_PREFIX
在GLFWs也使用ExternalProject_Add
.
然后你可以使用
find_package(glfw3 REQUIRED)
find_package(OpenGL REQUIRED)
Run Code Online (Sandbox Code Playgroud)
和
target_link_libraries(${PROJECT_NAME}
glfw
OpenGL::GL
)
Run Code Online (Sandbox Code Playgroud)
在你的项目中.
而不是使用ExternalProject
你也可以遵循GLFW的建议.