CMake 和 Windows 的 .Lib 文件

5
我一直在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
@Tsyvarev:它们似乎都位于C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include目录下。 - Richard
嗯,给定的目录似乎与Visual Studio相关。它的头文件可能与Mingw和CLion不兼容。但是你可以尝试使用它们:include_directories("C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include") - Tsyvarev
1
你应该使用UNIX斜杠'/'。也许可以使用LINK_DIRECTORIES来单独设置库路径,使用INCLUDE_DIRECTORIES来设置头文件路径。 - mainactual
@Richard,我也遇到了同样的问题。你能分享一下你的cmakelists.txt文件吗?这样我也可以让它正常运行吗? - Ishan
显示剩余2条评论
1个回答

1

只需在您的CMakeLists.txt文件之后添加这些内容

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

1
你好,非常感谢您的回复。我添加了这两行代码,但现在出现了以下错误:“错误:无法为未由此项目构建的目标“实际项目名称”指定链接库。” - Richard
@Richard:这种错误意味着target_link_libraries的第一个参数与add_executable的第一个参数不同。 - Tsyvarev
@Tsyvarev,add_executable和target_link_libraries中的名称相同。我已经更新了我的帖子。 - Richard
请在问题中的代码中使用实际名称。如果您不想透露原始名称,请选择其他名称:MyProjectmy_project... 并提供带有实际名称的错误消息。 - Tsyvarev
@Tsyvarev:对于我的错误,我感到非常抱歉。我已经更新了我的帖子,包括实际的项目名称以及编译器报错的错误信息。 - Richard
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接