1

我想使用 CMake 将 assimp 包含到我的项目中。我有 Ubuntu 14.04 LTE 和 QTCreator。项目包含 main.cpp 和存储在 libs 目录中的链接库。

主 CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
project(test)  

find_package(OpenGL REQUIRED)

# libs contain external libaries
add_subdirectory (libs)

include_directories(
    libs/glfw-3.0.4/include
    libs/assimp-3.1.1/include/
)

set(allLibs
    ${GLFW_LIBRARIES}
    ${OPENGL_LIBRARY}
    GLEW_LIB
    assimp
)

add_executable(test
    main/main.cpp 
)

target_link_libraries(Manipulator glfw assimp ${allLibs} )

libs 目录中的 CMakeList.txt

### GLFW ###

add_subdirectory (glfw-3.0.4)

include_directories(
    glfw-3.0.4/include/GLFW/
    glew-1.11.0/include/
    assimp-3.1.1/include/
)


set(OPENGL_LIBRARY
    -lGL -lGLU -lXrandr -lXext -lX11 -lrt
    ${CMAKE_DL_LIBS}
    ${GLFW_LIBRARIES}
)

### GLEW ###

set(GLEW_SOURCE
    glew-1.11.0/src/glew.c
)

add_library( GLEW_LIB STATIC
    ${GLEW_SOURCE}
)

target_link_libraries(GLEW_LIB
    ${OPENGL_LIBRARY}
)


### ASSIMP ###

# Zlib
add_subdirectory( assimp-3.1.1/contrib/zlib )

# Boost workaround
include_directories( assimp-3.1.1/code/BoostWorkaround )
add_definitions( -DASSIMP_BUILD_BOOST_WORKAROUND )

# Compile AssImp
add_subdirectory( assimp-3.1.1/code )

我收到以下错误。

libs/assimp-3.1.1/code/CMakeLists.txt:725(安装)处的 CMake 错误:安装 TARGETS,因为静态库目标“assimp”没有归档目标。

这一点是我的

INSTALL( TARGETS assimp # 725 line
         LIBRARY DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
         ARCHIVE DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
         RUNTIME DESTINATION ${ASSIMP_BIN_INSTALL_DIR}
         COMPONENT ${LIBASSIMP_COMPONENT})

如何正确链接这个库?

4

1 回答 1

1

这是我用来构建项目的 CMakeList.txt。所有外部库都存储在 libs 目录中。主文件存储在主目录中。

cmake_minimum_required (VERSION 2.6)
project (Project name)

find_package(OpenGL REQUIRED)

#Adding external CMakeList.txt files
add_subdirectory(libs/glfw-3.1)

#add GLEW as STATIC library
add_library(GLEW STATIC libs/glew-1.11.0/src/glew.c libs/glew-1.11.0/include/GL/glew.h)

#add include directories
include_directories(
                    ${CMAKE_CURRENT_SOURCE_DIR}
                    common/
                    libs/glfw-3.1/include/
                    libs/glew-1.11.0/include/
                    libs/glm/
                    libs/assimp-3.1.1/include/  
                    libs/CImg_162/CImg.h                
                    )
# set variables that are needed
set(ZLIB_LIBRARIES zlibstatic)
set(ENABLE_BOOST_WORKAROUND ON)
set(BUILD_STATIC_LIB ON)
set(BUILD_ASSIMP_TOOLS  ON)
set(ASSIMP_BUILD_STATIC_LIB ON)

add_subdirectory(libs/assimp-3.1.1)

#Add my own liblary
add_subdirectory(common)

set(extLibs
    ${extLibs}
    ${GLFW_LIBRARIES}
    )


add_executable (openGL main/main.cpp
                                Source/vertexShader.vs
                                Source/fragmentShader.fs
                )

target_link_libraries(openGL common assimp GLEW glfw ${GLFW_LIBRARIES})

Common 中的 CMakelist.txt 如下所示:

add_library(common model.cpp)

这应该适用于 Ubuntu 14.04。如果缺少某些库,请尝试按照本教程教程中的步骤进行操作

于 2015-08-27T21:12:35.487 回答