2016-07-15 15 views
1

私はJetBrains CLionを純粋なC(C ANSI)開発に使用しています。ターゲットはC++ですが、私の会社はCのみで動作します。 CLionはビルドシステムとしてCMakeのみを使用します。CMakeとのリンカエラー

私のシステムはDebian Jessieシステムで、sqlite3とlibsqlite3-devがインストールされています。

私はこのような単純なsqlite3のプロジェクトをビルドしようとしている:

#include <sqlite3.h> 
#include <stdio.h> 

    int main() { 
    sqlite3 *sqlConnection; 
    int ret; 
    ret = sqlite3_open("database/path.db, &sqlConnection); 
    if (ret) { 
     printf("Ups ... can't open %d", ret); 
    } 
    do_some_queries(sqlConnection); 
    return 0; 
} 

自動生成CMakeLists.txtがfollwingです。

cmake_minimum_required(VERSION 3.3) 


project(Project) 

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

set(SOURCE_FILES main.cpp) 
add_executable(Project ${SOURCE_FILES}) 

ビルドは、どちらかClionて、いずれかのコマンドラインから、私はリンカエラーを取得:

... 
undefined reference to `sqlite3_prepare_v2' 
undefined reference to `sqlite3_column_int' 
undefined reference to `sqlite3_open' 
... 

私はsqlite3のはCMakeのを指摘しなければならない知っているが、私は見つけることができませんこれを行う方法。

"find_package"と "find_library"がそれを行う可能性がありますが、どのように見つけることができません。

this Cmake fileも見つかりましたが、正常に使用できませんでした。

これで、sqlite3とCmakeをどのように統合できますか?

+0

'sqlite3.c'をソースに追加します。 –

+0

@ CL。あなたはsqlite3のソースコードをダウンロードし、プロジェクトと一緒にそれをコンパイルすると言う?私はそれを試して、他のリンカのエラー(スレッドなど)を持って、さらに、システムの周りのソースを複製するのが好きではありません。タフにしよう。 –

+0

[cmakeファイルにリンカを追加する方法やコンパイルフラグを追加する方法](http://stackoverflow.com/questions/11783932/how-to-add-linker-or-compile-flag-in-cmake-file) – usr1234567

答えて

2

sqliteヘッダーファイルへのパスをインクルードパスに追加する必要があります。そして、target_link_librariesを使用してsqliteのライブラリをリンク:

https://cmake.org/cmake/help/v3.3/command/target_link_libraries.html

+0

このlibsqlite3-devはすでにsqlite3.hをgccパスに置いています-lsqlite3オプションと同じですので、Cmakeの下にあるGCCの "-lsqlite3"オプションをどのように送るのですか? –

+0

設立...ちょうど-lsqlite3の後に-std = C++ 11 ... –

+0

答えを理解できませんでしたか? sqlite3はtarget_link_libraries経由で追加する必要があります。 – usr1234567

-1

私は回避策を設立しましたが、それはやって正しい方法ではありません。

Debianで "gcc main.c -lsqlite3"が動作するので(libsqlite3-devがインストールされている)、リンカに-lsqlite3フラグを渡すとそのトリックを行います。

ので、私は

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

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

を変更しましたそして、それは働きました。

+0

-lはリンカーフラグで、あなたの非解答は偶然に働くだけです。 http://stackoverflow.com/questions/11783932/how-to-add-linker-or-compile-flag-in-cmake-fileを詳しく見てください。 – usr1234567