2017-09-24 7 views
0

この問題のトラブルシューティングを試みましたが、結局私はあきらめてしまいました。外部ライブラリを使用しているときにターゲットメイクファイルを作成するルールがありません

私は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_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 

私のディレクトリ構造は以下の通りです:/ main.cppに SRC(コード) libs/ts3_sdk_3.0.4/include/teamspeak /(ライブラリのヘッダーを含む) libs/ts3_sdk_3.0.4/bin/linux/amd64/libts3client.so(インポートできないライブラリ)。

+0

libts3client.soの絶対パスを使用して、それが機能するかどうかを確認してください。 –

+0

@JohnZwinckはい、それは動作させました。なぜそれが事実であるか知っていますか? –

答えて

1

問題はここにある:

SET_PROPERTY (
    TARGET libts3client PROPERTY IMPORTED_LOCATION 
    libs/ts3_sdk_3.0.4/bin/linux/amd64/libts3client.so) 

あなたはそれがCMakeLists.txtが存在するものとは別のディレクトリにあなたのコマンドを実行しますので、多くの場合、CMakeのに問題が発生しますが、プレーン相対パスを、持っています。

コメントで発見したように、IMPORTED_LOCATIONを絶対パスに変更すると、それが修正されます。しかし、適切な解決策は、既知の塩基との相対パスを使用することです:

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ファイルがあるディレクトリの下にあることを明確に述べています。

関連する問題