首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake找不到Assimp

CMake找不到Assimp
EN

Stack Overflow用户
提问于 2022-05-28 15:04:21
回答 1查看 106关注 0票数 0

在回答之前:是的,我搜索了很长一段时间之后才在这里问这个问题,所以99%的其他类似问题的解决方案对我不起作用。

我有一个opengl应用程序,它使用以下库:

  • 格福
  • 伊姆吉
  • 高兴的,乐意的
  • 机顶盒
  • 阿斯辛普
  • glm
  • 文件浏览器(对话框的imgui扩展)

所有这些库都位于一个名为external的文件夹中,每个文件夹都位于其dir中。而且,glfw,assimp,glm是我的回购的git子模块,所以当我用git克隆时下载它们--递归mygitrepo。

通过查看我的git回购,您可以更好地理解项目的结构。

我的想法是使用add_subdirectories使它们使用自己的CMakeLists进行编译,我的主要CMakeLists如下所示:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.21.3)

project(Reskinner)

set(CMAKE_CXX_STANDARD 17)     
set(CMAKE_VERBOSE_MAKEFILE ON)

add_executable(${PROJECT_NAME} Main.cpp)

add_subdirectory(external/glfw)
add_subdirectory(external/assimp)
add_subdirectory(external/glad)
add_subdirectory(external/imgui)
add_subdirectory(external/stb)
add_subdirectory(external/glm)
add_subdirectory(external/FileBrowser)
add_subdirectory(src)

find_package(OpenGL REQUIRED)

target_include_directories(${PROJECT_NAME}
    PUBLIC external/glfw/include
    PUBLIC external/assimp/include
    PUBLIC external/glm
    PUBLIC external
    PUBLIC src
)

target_link_libraries(${PROJECT_NAME} glfw glad imgui stb glm Engine assimp FileBrowser)

该项目是在windows上使用visual studio开发的,我想在linux上编译它,而不使用visual visualstudio。cmake不会给出任何错误,但是当我运行make命令时,它会给出以下错误:

#include 没有这个名称的文件或目录。

就像我没有把assimp包含文件夹放在cmake中一样(但是我做了)。

你知道怎么做吗?我想要制作一个bash脚本来安装所有所需的依赖项和工具,比如xorg-dev、build必要的、git、cmake、make等等。所以,如果使用bash命令进行任何简单的修复,这对我来说是可以的。

EN

回答 1

Stack Overflow用户

发布于 2022-05-31 08:20:59

我想出了解决办法。我刚刚安装了conan,并使用它下载并找到assimp。因此,我从“外部”文件夹中删除了assimp、glm、glfw和conanfile.txt,并添加了一个。

在这里,conanfile.txt:

代码语言:javascript
复制
[requires]
assimp/5.2.2
glfw/3.3.7
glm/0.9.9.8
glad/0.1.35

[generators]
cmake_find_package
cmake_paths

我的主CMakeLists.txt现在如下所示:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.21.3)

project(Reskinner)

set(CMAKE_CXX_STANDARD 17)     
set(CMAKE_VERBOSE_MAKEFILE ON)

add_executable(${PROJECT_NAME} Main.cpp)

include(${CMAKE_BINARY_DIR}/conan_paths.cmake)

#   Retrieve conan.cmake
if (NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
    message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan")
    file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/master/conan.cmake" "${CMAKE_BINARY_DIR}/conan.cmake")
endif ()

include("${CMAKE_BINARY_DIR}/conan.cmake")

conan_cmake_run(CONANFILE "conanfile.txt" BASIC_SETUP UPDATE BUILD missing)
set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})

find_package(OpenGL REQUIRED)
find_package(glad REQUIRED)
find_package(glfw3 REQUIRED)
find_package(glm REQUIRED)
find_package(assimp REQUIRED)

add_subdirectory(external/stb)
add_subdirectory(external/imgui)
add_subdirectory(external/FileBrowser)
add_subdirectory(src)

file(MAKE_DIRECTORY
        "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Shaders")

function(install_file_to_bin file_name)
    file(INSTALL "${CMAKE_SOURCE_DIR}/Shaders/${file_name}" DESTINATION "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Shaders")
endfunction()

install_file_to_bin(1.model_loading.fs)
install_file_to_bin(1.model_loading.vs)
install_file_to_bin(4.1.fshader.fs)
install_file_to_bin(4.1.vshader.vs)
install_file_to_bin(animated_model_loading.fs)
install_file_to_bin(animated_model_loading.gs)
install_file_to_bin(animated_model_loading.vs)
install_file_to_bin(bb.vs)
install_file_to_bin(bb.fs)
install_file_to_bin(default.frag)
install_file_to_bin(default.fs)
install_file_to_bin(default.geom)
install_file_to_bin(default.vert)
install_file_to_bin(default.vs)
install_file_to_bin(floor.fs)
install_file_to_bin(floor.vs)
install_file_to_bin(framebuffer.frag)
install_file_to_bin(framebuffer.vert)
install_file_to_bin(grey_model.fs)
install_file_to_bin(grey_model.vs)
install_file_to_bin(hover.fs)
install_file_to_bin(hover.vs)
install_file_to_bin(influence_of_single_bone.fs)
install_file_to_bin(influence_of_single_bone.vs)
install_file_to_bin(mouse_shader.fs)
install_file_to_bin(mouse_shader.vs)
install_file_to_bin(normal_visualizer.fs)
install_file_to_bin(normal_visualizer.gs)
install_file_to_bin(normal_visualizer.vs)
install_file_to_bin(no_lighting_shader.fs)
install_file_to_bin(no_lighting_shader.vs)
install_file_to_bin(num_bones_visualization.fs)
install_file_to_bin(num_bones_visualization.vs)
install_file_to_bin(screen_shader.fs)
install_file_to_bin(screen_shader.vs)
install_file_to_bin(selected.fs)
install_file_to_bin(selected.vs)
install_file_to_bin(smooth_lighting_shader.fs)
install_file_to_bin(smooth_lighting_shader.vs)
install_file_to_bin(wireframe.vs)
install_file_to_bin(wireframe.fs)

set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE 1)
set(CMAKE_LINK_WHAT_YOU_USE 1)
set_property(TARGET ${PROJECT_NAME} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)

include_directories(
    ${OpenGL_INCLUDE_DIRS}
    ${glad_INCLUDE_DIRS}
    ${glfw3_INCLUDE_DIRS}
    ${glm_INCLUDE_DIRS}
    ${assimp_INCLUDE_DIRS}
    external
    src
)

target_link_libraries(${PROJECT_NAME} 
    ${OpenGL_LIBRARIES} 
    ${glad_LIBRARIES}
    ${glfw3_LIBRARIES} 
    ${glm_LIBRARIES} 
    stb
    ${assimp_LIBRARIES}
    imgui
    FileBrowser
    Engine 
)

有些注释对其他有这种麻烦的人是有用的:

  • Assimp在与conan一起使用时存在一些链接问题,因为它似乎并不下载所有东西,而是只下载您需要的东西,所以它可以用于#include,但它在链接阶段会发出抱怨。添加以下3行解决了问题: set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE 1) set(CMAKE_LINK_WHAT_YOU_USE 1) set_property(目标${PROJECT_NAME} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
  • 我有一个脚本可以在linux上安装你需要的所有东西,用conan安装东西,启动cmake等等。即使我用命令conan安装conan ..。.我需要conan.cmake文件,所以开始寻找conan.cmake文件的行修复了很多问题

shell脚本如下:

代码语言:javascript
复制
#!/bin/bash

sudo apt-get update
sudo apt-get install git
sudo apt-get install xorg-dev
sudo apt-get install make
sudo apt-get install cmake
sudo apt-get install build-essential
cd build
rm -rf *
conan install .. --settings os="Linux" --settings compiler="gcc" --settings compiler.version=11 --build missing
cmake -S .. -B . -D CMAKE_BUILD_TYPE=Release
make
cd build

希望这能帮到你

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72416752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档