【问题标题】:CMake and Window .Lib FilesCMake 和 Window .Lib 文件
【发布时间】:2016-02-13 13:55:38
【问题描述】:

我一直在努力在 Stackoverflow 中找到这个问题的答案,至少我能理解。我最近购买了 CLion,并希望将旧项目从 Visual Studio 移植到它。但我不知道如何将 .lib 文件链接或添加到我的项目中。我需要链接 Xinput 和 DSound。

在 Visual Studio 中,我只是添加了标题,然后将它们添加到我的文件顶部

#pragma comment(lib, "XInput.lib")

#pragma comment(lib, "Dsound.lib")

我完全不知道如何使用 CMake 链接到这些库,因为我是一个完整的初学者。

任何帮助将不胜感激

这是我当前的 CMake 文件

cmake_minimum_required(VERSION 3.3)
project("Handmade_Hero")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp)

INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}")

add_executable("Handmade_Hero" ${SOURCE_FILES})

更新

cmake_minimum_required(VERSION 3.3)
project(Handmade_Hero)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)

INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}")

add_executable(Handmade_Hero ${SOURCE_FILES})

set( LIBS XInput DSound )
target_link_libraries(Handmade_Hero ${LIBS} )

我的编译器现在抛出以下错误:

PATH\ClionProjects\Handmade-Hero\main.cpp:3:20: fatal error: Xinput.h: No such file or directory
 #include <Xinput.h>
                    ^
compilation terminated.
mingw32-make.exe[3]: *** [CMakeFiles/Handmade_Hero.dir/main.cpp.obj] Error 1
CMakeFiles\Handmade_Hero.dir\build.make:62: recipe for target 'CMakeFiles/Handmade_Hero.dir/main.cpp.obj' failed
mingw32-make.exe[2]: *** [CMakeFiles/Handmade_Hero.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles/Handmade_Hero.dir/rule] Error 2
mingw32-make.exe: *** [Handmade_Hero] Error 2
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/Handmade_Hero.dir/all' failed
CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/Handmade_Hero.dir/rule' failed
Makefile:117: recipe for target 'Handmade_Hero' failed

【问题讨论】:

  • 所以,你应该使用include_directories 告诉 CMake,哪个目录包含给定的标头。 Xinput.h 文件在哪里?
  • @Tsyvarev:它们似乎都位于 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include
  • 嗯,给定的目录似乎与 Visual Studio 相关。它的标头可能与 Mingw 和 CLion 不兼容。但你可以尝试使用它们:include_directories("C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include").
  • 实际的 .lib 文件似乎位于此处 'C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86'。当我添加 include_directories("C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include") 时,实际的编辑器会抱怨“ '('. ')' or argument expected, got "" "
  • 您应该使用 UNIX 斜杠 '/' 代替。并且可能使用LINK_DIRECTORIES 单独设置库路径。 INCLUDE_DIRECTORIES 用于标题。

标签: c++ windows cmake


【解决方案1】:

只需在 CMakeLists.txt 之后添加这些

SET( LIBS XInput DSound )
TARGET_LINK_LIBRARIES(projectname ${LIBS} )

【讨论】:

  • 嗨,非常感谢您的回复,我添加了这两行,现在抛出以下错误“错误:无法为该项目未构建的目标“实际项目名称”指定链接库。 "
  • @Richard:这样的错误意味着target_link_libraries 的第一个参数与add_executable 的第一个参数不同。
  • @Tsyvarev add_executable 和 target_link_libraries 的名称相同。我更新了我的帖子
  • @Richard:“项目名称”是您项目的真实名称吗?通常,CMake 目标不包含空格。
  • @Tsyvarev:不是,我的真实项目名称有一个下划线。我其实是在跟着一个教程HandMade Hero,所以项目名称是Handmade_Hero
猜你喜欢
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 2021-01-03
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多