c++ - 在 CMake 项目中包含 SOIL2 库

标签 c++ opengl cmake soil

我正在尝试将 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

感谢任何帮助!

最佳答案

终于使用以下 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}
)

关于c++ - 在 CMake 项目中包含 SOIL2 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61046994/

相关文章:

c++ - int32 溢出后可能的值是多少?

c++ - 如何配置 CMake 以便生成的 Visual Studio 项目找到可执行文件?

java - 动态图形用户界面框架设计

c++ - 混合 VBO 和非 VBO 渲染的 Opengles 给出 EXC_BAD_ACCESS

opengl - 如何从相机内在矩阵计算相机的视野?

c - 为什么我的 openGL 纹理只覆盖了我的四边形的一半?包含来源

CMake:如何将一个目标安装到两个具有不同名称的位置?

linux - 为什么 cmake 在我的构建目录中创建 'source' 目录?

c++ - Windows 消息循环而不是 QApplication::exec()/QApplication::processEvents()

c++ - 使用 CUDA 转置 : Inquiry on program in Blog