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:/MyCustomLibDir
と C:/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)
このコードでは、以下のことが行われます。
CMAKE_VS_SDK_LIBRARY_DIRECTORIES
変数に、C:/MyCustomLibDir
とC:/AnotherCustomLibDir
という2つのライブラリディレクトリへのパスを設定します。MyProject
という名前のプロジェクトを作成します。MyProject
ターゲットにmylib
ライブラリをリンクします。
Visual Studioが mylib
ライブラリをビルドするとき、Visual Studioは C:/MyCustomLibDir
と C:/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
コマンドを使用します。