C++ 如何在cmake中为链接器设置库?

C++ 如何在cmake中为链接器设置库?,c++,linker,cmake,C++,Linker,Cmake,我已经下载了SDL库,并能够设置包含路径,没有任何问题,但设置链接器是一个彻底的噩梦。。。我该如何将cmake指向正确的文件 cmake_minimum_required(VERSION 3.2) project(simple_timeline_recorder) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/build) set(

我已经下载了SDL库,并能够设置包含路径,没有任何问题,但设置链接器是一个彻底的噩梦。。。我该如何将cmake指向正确的文件

cmake_minimum_required(VERSION 3.2)
project(simple_timeline_recorder)

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

set(RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/build)
set(LIBRARY_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/build/")
set(EXECUTABLE_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/build/")

include_directories("${PROJECT_SOURCE_DIR}/Dependencies/SDL/include")
target_link_libraries(simple_timeline_recorder)

set(SOURCE_FILES src/main.cpp)
add_executable(simple_timeline_recorder ${SOURCE_FILES})
~z~谢谢你的帮助

编辑(vsoftco)>

不幸的是,由于某些原因,它不起作用。我用的是来自jetbrains和mingw的CLion。我尝试过使用扩展和不使用扩展,也尝试过给出绝对路径。没用。错误/异常是相同的

...

include_directories("${PROJECT_SOURCE_DIR}/Dependencies/SDL/include")

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -LDependencies/SDL/lib/win32/SDL2")

set(SOURCE_FILES src/main.cpp)
add_executable(simple_timeline_recorder ${SOURCE_FILES})

target_link_libraries(simple_timeline_recorder SDL2)
错误消息:

Linking CXX executable simple_timeline_recorder.exe
d:/apps/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lSDL2
collect2.exe: error: ld returned 1 exit status
CMakeFiles\simple_timeline_recorder.dir\build.make:87: recipe for target 'simple_timeline_recorder.exe' failed
CMakeFiles\Makefile2:59: recipe for target 'CMakeFiles/simple_timeline_recorder.dir/all' failed
mingw32-make.exe[2]: *** [simple_timeline_recorder.exe] Error 1
mingw32-make.exe[1]: *** [CMakeFiles/simple_timeline_recorder.dir/all] Error 2
mingw32-make.exe: *** [all] Error 2
Makefile:74: recipe for target 'all' failed

您似乎没有指定要链接的库的路径。 假设您希望包含
mylib。因此
/path/到/mylib
。您可以做的是在
CMakeLists.txt
行中添加

SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/path/to/mylib")
然后在
CMakeLists.txt
的最后一行(在
ADD_EXECUTABLE
子句之后)使用

更新编辑

试一试


因此,您可以确保找到了正确的路径。

不幸的是,这对我不起作用。我在第一篇文章中提供了详细信息。我可能做错了什么事/@starach查看更新的编辑。它应该会起作用,如果不是的话,那真的很奇怪。在我看来,我做了很多错事。看看我自己对这个问题的回答。不过还是谢谢你。你让我走上了正确的道路我放弃了它“正在工作”,现在又出现了一个关于丢失库的错误。。。回到VisualStudio,我想…@starach尝试一步一步地构建它(首先是一个没有lib的示例,然后是使用lib),直到你弄清楚到底发生了什么。原则上,它应该是有效的。您还可以检查生成的makefile并查看其中缺少什么。
TARGET_LINK_LIBRARIES(simple_timeline_recorder mylib)
SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${PROJECT_SOURCE_DIR}/Dependencies/SDL/lib/win32/SDL2")