MSVC2019でSQLiteを使うまでのメモ

SQLite公式から

f:id:pto8913:20191025024511p:plain

以下をダウンロードして展開

f:id:pto8913:20191025024846p:plain
f:id:pto8913:20191025024849p:plain

ダウンロードしたら
展開したフォルダの中身をプロジェクトの実行ファイルがある場所に移動してください

f:id:pto8913:20191025031919p:plain

f:id:pto8913:20191025031922p:plain

移動したらMSVCに移動して開発者コマンドプロンプトを開いてください
f:id:pto8913:20191025031929p:plain

開いたら、プロジェクトの実行ファイルがある場所に移動
f:id:pto8913:20191025031932p:plain

ここは環境によって変わります。
MSVC2017とか2015とか
"C:/Program Files(x86)/Microsoft Visual Studio/20xx/(Professional | Enterprise | Community)/VC/Tools/MSVC/xxx/bin/Hostx(64 | 86)/x(64 | 86)/lib.exe"
ここのパスをコピー
f:id:pto8913:20191025031936p:plain

環境によってx86だったりx64だったりするので変えてください。
さっき開いた、開発者コマンドプロンプトにペーストして
"path" /DEF:sqlite3.def /MACHINE:x64 /OUT:sqlite3.lib
f:id:pto8913:20191025031939p:plain
上記を実行

こんな感じになるはず。
f:id:pto8913:20191025031942p:plain

sqlite3.lib が追加されているはずです
f:id:pto8913:20191025031946p:plain

ここまでだとMSVCはsqlite3.lib を見つけられないので、
sqlite3.lib を作成したときのMACHINE:(x64 | x86) にあわせてください

f:id:pto8913:20191025033459p:plain
f:id:pto8913:20191025033050p:plain
f:id:pto8913:20191025033239p:plain

これで終わりです。

コード例

#include <iostream>
#include "sqlite3.h"

int main() 
{
    sqlite3* db = nullptr;
    sqlite3_stmt* stmt = nullptr;

    const char* db_name = "test.db";

    // If use string type, you should be `db_name.c_str()`
    // string型を使うときは`db_name.c_str()`を使ってください
    int ret = sqlite3_open(db_name, &db);
    if (ret != SQLITE_OK)
    {
        printf("%s", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 0;
    }

    // if type string -> query.c_str()
    const char* query = "select * from test";
    ret = sqlite3_prepare_v2(db, query, -1, &stmt, nullptr);
    if (ret != SQLITE_OK)
    {
        printf("%s", sqlite3_errmsg(db));
        sqlite3_finalize(stmt);
        sqlite3_close(db);
        return 0;
    }

    sqlite3_finalize(stmt);
    sqlite3_close(db);

    return 0;
}

おまけ(Unreal Engine C++からSQLiteを使う場合)

sqlite3.lib の生成までは同じです。

f:id:pto8913:20191025034645p:plain

生成したらBinaries ディレクトリに以下を追加
.dllだけでいいかも?
f:id:pto8913:20191025034536p:plain
まぁ何個あってもいいやろの精神で

次に、(なければ)ThirdParty ディレクトリを作成し、
ThirdParty/sqlite/のようにディレクトリを作って
f:id:pto8913:20191025034954p:plain
Includes ディレクトリにsqlite3.h
Libraries ディレクトリにsqlite3.lib
を追加。

次に、ProjectName.build.csを開きます。
以下のようにコードを追加してください

using UnrealBuildTool;
using System.IO;

public class Terrain : ModuleRules
{
    string ThirdPartyPath = "C:\\study\\ProjectName\\ThirdParty";
    public Terrain(ReadOnlyTargetRules Target) : base(Target)
    {
        PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
    
        PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });

        string LibrariesPath = Path.Combine(ThirdPartyPath, "sqlite", "Libraries");
        PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, "sqlite3.lib"));
        PublicIncludePaths.Add(Path.Combine(ThirdPartyPath, "sqlite", "Includes"));
    }
}

これでUnreal Engine C++からも呼び出せるようになりました。
Blueprintから呼び出せるのかは試してないのでわかりませんが・・・
今回はここまでですありがとうございました。