C++11 使用外部库时没有生成目标makefile的规则
我试图解决这个问题,但最终我放弃了,我无法解决它 我正在使用CLion,需要导入一个外部共享库(ts3client.so)。无论我做什么,都会以这样或那样的方式失败 目前,我有以下几点:C++11 使用外部库时没有生成目标makefile的规则,c++11,cmake,C++11,Cmake,我试图解决这个问题,但最终我放弃了,我无法解决它 我正在使用CLion,需要导入一个外部共享库(ts3client.so)。无论我做什么,都会以这样或那样的方式失败 目前,我有以下几点: cmake_minimum_required(VERSION 3.8) project(TSMusicBot) set(CMAKE_CXX_STANDARD 11) set(SOURCE_FILES src/main.cpp) # Teamspeak Libraries INCLUDE_DIRECTORI
cmake_minimum_required(VERSION 3.8)
project(TSMusicBot)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES src/main.cpp)
# Teamspeak Libraries
INCLUDE_DIRECTORIES(libs/ts3_sdk_3.0.4/include)
ADD_LIBRARY (libts3client SHARED IMPORTED GLOBAL)
SET_PROPERTY (
TARGET libts3client PROPERTY IMPORTED_LOCATION
libs/ts3_sdk_3.0.4/bin/linux/amd64/libts3client.so)
add_executable(TSMusicBot ${SOURCE_FILES})
target_link_libraries(TSMusicBot libts3client)
这给了我以下错误:
make[2]: *** No rule to make target 'libs/ts3_sdk_3.0.4/bin/linux/amd64/libts3client.so', needed by 'TSMusicBot'. Stop.
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/TSMusicBot.dir/all' failed
make[1]: *** [CMakeFiles/TSMusicBot.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
我的目录结构如下所示:
src/main.cpp(代码)
libs/ts3_sdk_3.0.4/include/teamspeak/(其中包含库的标题)
libs/ts3_sdk_3.0.4/bin/linux/amd64/libts3client.so(这是我无法导入的库)。问题在于:
SET_PROPERTY (
TARGET libts3client PROPERTY IMPORTED_LOCATION
libs/ts3_sdk_3.0.4/bin/linux/amd64/libts3client.so)
这里有一个简单的相对路径,这通常会导致CMake出现问题,因为它将在不同的目录中运行命令,而不是存在CMakeLists.txt
的目录
正如我们在一篇评论中发现的,将导入的位置
更改为绝对路径可以修复它。但是,正确的解决方案是使用具有已知基的相对路径:
SET_PROPERTY (
TARGET libts3client PROPERTY IMPORTED_LOCATION
${CMAKE_CURRENT_SOURCE_DIR}/libs/ts3_sdk_3.0.4/bin/linux/amd64/libts3client.so)
这明确表示,
libs
目录位于该CMakeLists.txt
文件所在的目录下。尝试使用libts3client.so的绝对路径,看看是否有效。@JohnZwinck是的,它已使其有效。你知道为什么会这样吗?