提问人:Dan Quinn 提问时间:4/6/2020 最后编辑:Dan Quinn 更新时间:4/6/2020 访问量:1782
在 CMake 项目中包含 SOIL2 库
Including SOIL2 library in a CMake project
问:
我正在尝试将 SOIL2 包含在我的 C++ OpenGL 项目中。
到目前为止,我已经
- 从 https://github.com/SpartanJ/SOIL2 下载了库
- 通过运行 Premake 4 和 Make 来构建它。
- 将 src/SOIL2/ 目录复制到 /usr/local/include
- 尝试将 libsoil2-debug.a 添加到 /usr/local/lib
- 遵循了使用 CMake 包含库的各种方法示例
平台是 MacOS (Catalina) 我还是 CMake 的新手,所以我很确定这就是我的问题所在。
目前,我的 CMakeLists 文件如下所示:
cmake_minimum_required(VERSION 3.8)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 99)
set(This ComputerGraphicsProgramming)
project(${This} CXX C)
file(GLOB_RECURSE SOURCES src/*.cpp)
file(GLOB_RECURSE SOIL2_SOURCES /usr/local/include/SOIL2/*.c)
add_executable(${This} ${SOURCES} ${HEADERS})
include_directories(
include
lib
/usr/local/include
)
link_directories(
/usr/local/include
/usr/local/include/SOIL2
)
find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)
find_package(glew REQUIRED)
find_package(glm REQUIRED)
find_library(soil2-debug REQUIRED)
target_link_libraries(${This}
GLEW::GLEW
${OPENGL_LIBRARIES} glfw
soil2-debug
)
Texture.hpp,我包含 SOIL 的文件,如下所示:
#include <GL/glew.h>
#include <SOIL2/SOIL2.h>
#include <string>
class Texture
{
public:
Texture(std::string filename);
~Texture();
private:
unsigned int m_ID;
};
这些是我在运行 make 时出现的错误:
$ make
[ 9%] Linking CXX executable ComputerGraphicsProgramming
ld: library not found for -lsoil2-debug
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [ComputerGraphicsProgramming] Error 1
make[1]: *** [CMakeFiles/ComputerGraphicsProgramming.dir/all] Error 2
make: *** [all] Error 2
任何帮助都值得赞赏!
答:
1赞
dboy
4/6/2020
#1
看起来 libsoil2-debug.a 无法找到。尝试将 /usr/local/lib 添加到您的CMAKE_PREFIX_PATH中:
list(APPEND CMAKE_PREFIX_PATH "/usr/local/lib")
CMakeList.txt 文件顶部的某个位置
评论
0赞
Dan Quinn
4/6/2020
原来我只是用错了find_library,但这让我走上了正确的轨道,非常感谢!
2赞
Dan Quinn
4/6/2020
#2
最后,使用以下 CMakeLists 文件生成项目。感谢您的回复!
cmake_minimum_required(VERSION 3.8)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 99)
set(This ComputerGraphicsProgramming)
project(${This} CXX C)
file(GLOB_RECURSE SOURCES src/*.cpp)
add_executable(${This} ${SOURCES} ${HEADERS})
include_directories(
include
/usr/local/include
)
find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)
find_package(glew REQUIRED)
find_package(glm REQUIRED)
find_library(SOIL2 soil2-debug)
target_link_libraries(${This}
GLEW::GLEW
${OPENGL_LIBRARIES} glfw
${SOIL2}
)
评论