Visual Studioでライブラリ探しに困らない?CMake変数「CMAKE_VS_SDK_LIBRARY_DIRECTORIES」のすべて


CMAKE_VS_SDK_LIBRARY_DIRECTORIES は、CMakeにおけるVisual Studio SDKのライブラリディレクトリを指定するための変数です。この変数は、Visual Studioがデフォルトで使用するライブラリディレクトリを上書きするために使用できます。これは、特定のライブラリバージョンを使用する必要がある場合や、カスタムライブラリディレクトリを使用したい場合などに役立ちます。

構文

set(CMAKE_VS_SDK_LIBRARY_DIRECTORIES "<dir1>;<dir2>;...;<dirN>")

<dir1>, <dir2>, ... <dirN> は、ライブラリファイルが格納されているディレクトリへのパスです。これらのパスはセミコロンで区切ります。

set(CMAKE_VS_SDK_LIBRARY_DIRECTORIES
    "C:/MyCustomLibDir;C:/AnotherCustomLibDir")

この例では、Visual Studioは C:/MyCustomLibDirC:/AnotherCustomLibDir にあるライブラリファイルを検索します。

  • この変数を設定すると、Visual Studioがデフォルトで使用するすべてのライブラリディレクトリが上書きされます。特定のライブラリディレクトリのみを上書きしたい場合は、link_directories コマンドを使用してください。
  • この変数は、target_link_libraries コマンドの前に設定する必要があります。
  • CMAKE_VS_SDK_LIBRARY_DIRECTORIES は、Visual Studio 2012以降でのみ使用できます。


# Visual Studio SDKのライブラリディレクトリを指定する
set(CMAKE_VS_SDK_LIBRARY_DIRECTORIES
    "C:/MyCustomLibDir;C:/AnotherCustomLibDir")

# プロジェクトをビルドする
project(MyProject)

# ライブラリをリンクする
target_link_libraries(MyProject mylib)

このコードでは、以下のことが行われます。

  1. CMAKE_VS_SDK_LIBRARY_DIRECTORIES 変数に、C:/MyCustomLibDirC:/AnotherCustomLibDir という2つのライブラリディレクトリへのパスを設定します。
  2. MyProject という名前のプロジェクトを作成します。
  3. MyProject ターゲットに mylib ライブラリをリンクします。

Visual Studioが mylib ライブラリをビルドするとき、Visual Studioは C:/MyCustomLibDirC:/AnotherCustomLibDir にあるライブラリファイルを検索します。

  • このコードは、あくまでも例であり、実際のプロジェクトでは必要に応じて変更する必要があります。
  • このコードは、Visual Studio 2012以降でのみ使用できます。


link_directories コマンド

link_directories コマンドは、特定のターゲットにリンクするライブラリディレクトリを指定するために使用できます。このコマンドは、CMAKE_VS_SDK_LIBRARY_DIRECTORIES 変数よりも柔軟性があり、特定のターゲットにのみライブラリディレクトリを追加することができます。

target_link_directories(MyProject PRIVATE "C:/MyCustomLibDir")

この例では、MyProject ターゲットに C:/MyCustomLibDir ディレクトリにあるライブラリをリンクします。

環境変数

LIB 環境変数は、Visual Studioがライブラリファイルを検索するディレクトリを指定するために使用できます。この方法は、すべてのターゲットに同じライブラリディレクトリを使用したい場合に役立ちます。

set(LIB "C:/MyCustomLibDir;%LIB%")

この例では、C:/MyCustomLibDir ディレクトリが LIB 環境変数の値に追加されます。

CMAKE_MODULE_PATH とカスタムモジュール

CMAKE_MODULE_PATH 変数は、CMakeモジュールの検索パスを指定するために使用できます。カスタムモジュールを作成して、Visual Studio SDKのライブラリディレクトリを検索するロジックを実装することができます。

set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};MyCustomModulesDir")

この例では、MyCustomModulesDir ディレクトリが CMAKE_MODULE_PATH 変数の値に追加されます。このディレクトリに、Visual Studio SDKのライブラリディレクトリを検索するロジックを実装したCMakeモジュールを配置する必要があります。

プロジェクト固有のライブラリディレクトリ

プロジェクト固有のライブラリディレクトリを使用することもできます。この方法は、他のプロジェクトとライブラリディレクトリを共有する必要がない場合に役立ちます。

file(GLOB_RECURSE LIBRARY_DIRS "path/to/my/libraries")

target_link_directories(MyProject PRIVATE ${LIBRARY_DIRS})

この例では、path/to/my/libraries ディレクトリツリーにあるすべてのディレクトリが LIBRARY_DIRS 変数に格納されます。その後、MyProject ターゲットにこれらのディレクトリにあるライブラリをリンクします。

  • プロジェクト固有のライブラリディレクトリを使用する必要がある場合は、プロジェクト固有のライブラリディレクトリを使用します。
  • より柔軟な制御が必要な場合は、CMAKE_MODULE_PATH とカスタムモジュールを使用します。
  • すべてのターゲットに同じライブラリディレクトリを使用したい場合は、環境変数を使用します。
  • 特定のターゲットにのみライブラリディレクトリを追加したい場合は、link_directories コマンドを使用します。