首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Irrlicht为CMake项目构建错误LNK1104

使用Irrlicht为CMake项目构建错误LNK1104
EN

Stack Overflow用户
提问于 2020-05-22 21:59:59
回答 1查看 135关注 0票数 1

我目前正在用Visual Studio 2019做一个学校项目,我们面临着一个问题:

代码语言:javascript
复制
LINK : fatal error LNK1104: cannot open file 'Irrlicht.lib'

只有当我们已经编译了我们的CMake文件时,错误才会出现,这是它第一次工作。

我的CMakeLists.txt:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.9)
project(IndieCMAKE)

set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
set(CMAKE_CXX_STANDARD 11)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

find_package(Irrlicht)

link_libraries(Irrlicht)

INCLUDE_DIRECTORIES(
        "/usr/include/irrlicht"
        "./include"
${PROJECT_SOURCE_DIR}/include
)
include_directories(inc)

add_executable(IndieCMAKE
 ./main.cpp)

这是我的FindIrrlicht.cmake文件:

代码语言:javascript
复制
    IF (NOT Irrlicht_INCLUDE_DIRS OR NOT Irrlicht_LIBRARIES)
  FIND_PATH(Irrlicht_INCLUDE_DIRS
    NAMES
      irrlicht.h
    PATHS
      /usr/include/irrlicht/        # Default Fedora28 system include path
      /usr/local/include/irrlicht/  # Default Fedora28 local include path
      ${CMAKE_MODULE_PATH}/include/ # Expected to contain the path to this file for Windows10
      ${Irrlicht_DIR}/include/      # Irrlicht root directory (if provided)
  )

  IF (MSVC)     # Windows
    SET(CMAKE_FIND_LIBRARY_PREFIXES "")
    SET(CMAKE_FIND_LIBRARY_SUFFIXES ".lib")
  ELSE (MSVC)   # Linux
    SET(CMAKE_FIND_LIBRARY_PREFIXES "lib")
    SET(CMAKE_FIND_LIBRARY_SUFFIXES ".so")
  ENDIF(MSVC)

  FIND_LIBRARY(Irrlicht_LIBRARIES
    NAMES
      Irrlicht
    PATHS
      /usr/lib64             # Default Fedora28 library path
      /usr/lib/                     # Some more Linux library path
      /usr/lib/x86_64-linux-gnu/    # Some more Linux library path
      /usr/local/lib/               # Some more Linux library path
      /usr/local/lib64/             # Some more Linux library path
      ${CMAKE_MODULE_PATH}/         # Expected to contain the path to this file for Windows10
      ${Irrlicht_DIR}/              # Irrlicht root directory (if provided)
  )
ENDIF (NOT Irrlicht_INCLUDE_DIRS OR NOT Irrlicht_LIBRARIES)

IF (Irrlicht_INCLUDE_DIRS AND Irrlicht_LIBRARIES)
  SET(Irrlicht_FOUND TRUE)
ELSE (Irrlicht_INCLUDE_DIRS AND Irrlicht_LIBRARIES)
  SET(Irrlicht_FOUND FALSE)
ENDIF (Irrlicht_INCLUDE_DIRS AND Irrlicht_LIBRARIES)

IF (Irrlicht_FIND_REQUIRED AND NOT Irrlicht_FOUND)
  MESSAGE(FATAL_ERROR
    "  Irrlicht not found.\n"
    "      Windows: Fill CMake variable CMAKE_MODULE_PATH to the provided directory.\n"
    "      Linux: Install Irrlicht using your package manager ($> sudo dnf install irrlicht-devel).\n"
  )
ENDIF (Irrlicht_FIND_REQUIRED AND NOT Irrlicht_FOUND)

以下是我的CMake图形用户界面变量:

EN

回答 1

Stack Overflow用户

发布于 2020-05-23 00:13:24

如果您使用的是CMake Find Module,例如FindIrrlicht.cmake文件,find_package(Irrlicht)命令应该会为您填充一些Irrlicht_* CMake变量。假设find_package()确实正确地找到了包组件,您可以在CMake文件中使用这些Irrlicht_*变量来指定CMake应该在何处查找Irrlicht包头和库。

类似下面的CMake文件应该可以工作:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.9)
project(IndieCMAKE)

set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
set(CMAKE_CXX_STANDARD 11)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

# Use REQUIRED here, to ensure CMake finds the package before continuing.
find_package(Irrlicht REQUIRED)

# Don't use this command. It's old, and the syntax didn't work, in your case.
#link_libraries(Irrlicht)

# Specify your directories that contain headers, including the Irrlicht headers.
include_directories(
    ${Irrlicht_INCLUDE_DIRS}
)

# Define your executable target.
add_executable(IndieCMAKE
    main.cpp
)

# Link the Irrlicht library to your executable target.
target_link_libraries(IndieCMAKE PRIVATE ${Irrlicht_LIBRARIES})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61956713

复制
相关文章

相似问题

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