king_dog_fun
@king_dog_fun (No 440)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

vcpkgでusageがない場合のCMakeLists.txtの書き方

解決したいこと

vcpkgでインストールしたライブラリをCMakeLists.txtのfind_packageやtarget_link_librariesで指定するためのキーワードが分かりません。例えばfmtであれば、このURLにあるusageから分かります。fmtのusageファイルは以下の通りです。

usage
The package fmt provides CMake targets:

    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt)

    # Or use the header-only version
    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt-header-only)

 しかし、例えばsqlite-modern-cppのライブラリをvcpkgによりインストールすると、vcpkgのディレクトリにあるportsディレクトリにsqlite-modern-cppディレクトリが生成されますが、ディレクトリ内はportfile.cmakeとvcpkg.jsonの2つのファイルだけで、usageファイルがありません。そのため、find_packageやtarget_link_librariesのキーワードが分かりません。
 念のためportfile.cmakeとvcpkg.jsonの内容を記載します。私が調べた限り、この2つのファイルはCMakeLists.txt内のキーワードに関連しないと考えています。

portfile.cmake
# header only
vcpkg_from_github(
    OUT_SOURCE_PATH SOURCE_PATH
    REPO SqliteModernCpp/sqlite_modern_cpp
    REF 936cd0c86aacac87a3dab32906397944ae5f6c3d
    SHA512 8ce1b7593fe77dcab297ab4cae0158b43d55b33c1823b2dc5bf22e5545d9781d675ba5ac82b81782f502b34d2335eee2c26167726746a61a0ad566b657d2faf0
    HEAD_REF master
)

file(INSTALL ${SOURCE_PATH}/hdr/ DESTINATION ${CURRENT_PACKAGES_DIR}/include)

file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/share/sqlite-modern-cpp)
file(INSTALL ${SOURCE_PATH}/License.txt DESTINATION ${CURRENT_PACKAGES_DIR}/share/sqlite-modern-cpp RENAME copyright)

vcpkg.json
{
  "name": "sqlite-modern-cpp",
  "version": "3.2-936cd0c8",
  "port-version": 2,
  "description": "The C++14 wrapper around sqlite library",
  "homepage": "https://github.com/aminroosta/sqlite_modern_cpp",
  "dependencies": [
    "sqlite3"
  ]
}

 CMakeLists.txtでfind_packageやtarget_link_librariesについてキーワードの調べ方を教えて頂ければ幸いです。

0

1Answer

自己解決したので解決法を示しておきます。

解決法

vcpkgのマニュフェストモードにおけるライブラリインストールは、vcpkg公式チュートリアルに従うと以下のコマンドで済みます。例えばfmtをインストールする場合は以下の通りです。

vcpkg add port fmt

 しかし、コマンドのキーワードから推察するに、これは実際にライブラリをインストールしているというよりも、インストールするためのポートを用意しているというようなニュアンスを感じます。直感の通り、これはまだインストールが済んでいる状態とは言えないようで、続けて以下のコマンドを実行する必要があるようです。(ただしCMakeによるビルドを行うためには必要ないコマンドです)

vcpkg install

以下に参考としたQ&Aに従うのであれば、2回目にこのコマンドを実行した際、target_link_librariesのターゲット名が表示されるようです。実際に試してみた結果を示します。

$ vcpkg install

Fetching registry information from https://github.com/microsoft/vcpkg (HEAD)...
Detecting compiler hash for triplet x64-linux...
The following packages will be built and installed:
    fmt:x64-linux@10.2.1#1 -- /home/codespace/.cache/vcpkg/registries/git-trees/74cfe848ded3d9610b11e442aa6b2341cfa65b1b
    sqlite-modern-cpp:x64-linux@3.2-936cd0c8#2 -- /home/codespace/.cache/vcpkg/registries/git-trees/b468e28a38d1849eecaa0113410b214dbe41cd27
  * sqlite3[core,json1]:x64-linux@3.45.1#1 -- /home/codespace/.cache/vcpkg/registries/git-trees/4e2ae6bc4849b52c6cd2e2d51c110f69ac3901d0
  * vcpkg-cmake:x64-linux@2023-05-04 -- /home/codespace/.cache/vcpkg/registries/git-trees/88a7058fc7fa73a9c4c99cfcae9d79e2abf87a5a
  * vcpkg-cmake-config:x64-linux@2022-02-06#1 -- /home/codespace/.cache/vcpkg/registries/git-trees/8d54cc4f487d51b655abec5f9c9c3f86ca83311f
Additional packages (*) will be modified to complete this operation.
Restored 3 package(s) from /home/codespace/.cache/vcpkg/archives in 63.3 ms. Use --debug to see more details.
Installing 1/5 vcpkg-cmake-config:x64-linux@2022-02-06#1...
Elapsed time to handle vcpkg-cmake-config:x64-linux: 1.04 ms
vcpkg-cmake-config:x64-linux package ABI: 15b458cca4fbc6443d2622440ee664c8c70c3289dca54ec735ced947ed9868fb
Installing 2/5 vcpkg-cmake:x64-linux@2023-05-04...
Elapsed time to handle vcpkg-cmake:x64-linux: 774 us
vcpkg-cmake:x64-linux package ABI: d7080fd92d881fc3f3eabc0f27dc88693166c90ce982b5ff98d35230107615db
Installing 3/5 fmt:x64-linux@10.2.1#1...
Elapsed time to handle fmt:x64-linux: 2.05 ms
fmt:x64-linux package ABI: 5aef59a0c73e1f57661661fad3f6be7cc1cefd360c8e77087b550a15080799f2
Installing 4/5 sqlite3[core,json1]:x64-linux@3.45.1#1...
Building sqlite3[core,json1]:x64-linux@3.45.1#1...
-- Installing port from location: /home/codespace/.cache/vcpkg/registries/git-trees/4e2ae6bc4849b52c6cd2e2d51c110f69ac3901d0
-- Downloading https://sqlite.org/2024/sqlite-autoconf-3450100.tar.gz -> sqlite-autoconf-3450100.zip...
-- Extracting source /workspaces/mimicAI/vcpkg/downloads/sqlite-autoconf-3450100.zip
-- Applying patch fix-arm-uwp.patch
-- Applying patch add-config-include.patch
-- Using source at /workspaces/mimicAI/vcpkg/buildtrees/sqlite3/src/nf-3450100-45b7b49e8b.clean
-- Configuring x64-linux
-- Building x64-linux-dbg
-- Building x64-linux-rel
-- Fixing pkgconfig file: /workspaces/mimicAI/vcpkg/packages/sqlite3_x64-linux/lib/pkgconfig/sqlite3.pc
-- Fixing pkgconfig file: /workspaces/mimicAI/vcpkg/packages/sqlite3_x64-linux/debug/lib/pkgconfig/sqlite3.pc
-- Installing: /workspaces/mimicAI/vcpkg/packages/sqlite3_x64-linux/share/sqlite3/usage
-- Performing post-build validation
Stored binaries in 1 destinations in 378 ms.
Elapsed time to handle sqlite3:x64-linux: 41 s
sqlite3:x64-linux package ABI: 587b8e79988d9fcfed9a58f44910436dd2e9ea135731b6f1fe04e0f2817018d0
Installing 5/5 sqlite-modern-cpp:x64-linux@3.2-936cd0c8#2...
Building sqlite-modern-cpp:x64-linux@3.2-936cd0c8#2...
-- Installing port from location: /home/codespace/.cache/vcpkg/registries/git-trees/b468e28a38d1849eecaa0113410b214dbe41cd27
-- Downloading https://github.com/SqliteModernCpp/sqlite_modern_cpp/archive/936cd0c86aacac87a3dab32906397944ae5f6c3d.tar.gz -> SqliteModernCpp-sqlite_modern_cpp-936cd0c86aacac87a3dab32906397944ae5f6c3d.tar.gz...
-- Extracting source /workspaces/mimicAI/vcpkg/downloads/SqliteModernCpp-sqlite_modern_cpp-936cd0c86aacac87a3dab32906397944ae5f6c3d.tar.gz
-- Using source at /workspaces/mimicAI/vcpkg/buildtrees/sqlite-modern-cpp/src/44ae5f6c3d-e6c4828222.clean
-- Up-to-date: /workspaces/mimicAI/vcpkg/packages/sqlite-modern-cpp_x64-linux/include
-- Installing: /workspaces/mimicAI/vcpkg/packages/sqlite-modern-cpp_x64-linux/include/sqlite_modern_cpp
-- Installing: /workspaces/mimicAI/vcpkg/packages/sqlite-modern-cpp_x64-linux/include/sqlite_modern_cpp/sqlcipher.h
-- Installing: /workspaces/mimicAI/vcpkg/packages/sqlite-modern-cpp_x64-linux/include/sqlite_modern_cpp/lists
-- Installing: /workspaces/mimicAI/vcpkg/packages/sqlite-modern-cpp_x64-linux/include/sqlite_modern_cpp/lists/error_codes.h
-- Installing: /workspaces/mimicAI/vcpkg/packages/sqlite-modern-cpp_x64-linux/include/sqlite_modern_cpp/errors.h
-- Installing: /workspaces/mimicAI/vcpkg/packages/sqlite-modern-cpp_x64-linux/include/sqlite_modern_cpp/log.h
-- Installing: /workspaces/mimicAI/vcpkg/packages/sqlite-modern-cpp_x64-linux/include/sqlite_modern_cpp/utility
-- Installing: /workspaces/mimicAI/vcpkg/packages/sqlite-modern-cpp_x64-linux/include/sqlite_modern_cpp/utility/function_traits.h
-- Installing: /workspaces/mimicAI/vcpkg/packages/sqlite-modern-cpp_x64-linux/include/sqlite_modern_cpp/utility/variant.h
-- Installing: /workspaces/mimicAI/vcpkg/packages/sqlite-modern-cpp_x64-linux/include/sqlite_modern_cpp/utility/uncaught_exceptions.h
-- Installing: /workspaces/mimicAI/vcpkg/packages/sqlite-modern-cpp_x64-linux/include/sqlite_modern_cpp/utility/utf16_utf8.h
-- Installing: /workspaces/mimicAI/vcpkg/packages/sqlite-modern-cpp_x64-linux/include/sqlite_modern_cpp.h
-- Installing: /workspaces/mimicAI/vcpkg/packages/sqlite-modern-cpp_x64-linux/share/sqlite-modern-cpp/copyright
-- Performing post-build validation
Stored binaries in 1 destinations in 5.74 ms.
Elapsed time to handle sqlite-modern-cpp:x64-linux: 1.4 s
sqlite-modern-cpp:x64-linux package ABI: cdeb65048e12e43ae4068e33dae1200996085f581b95432585bb7e0908347c9a
Total install time: 43 s
The package fmt provides CMake targets:

    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt)

    # Or use the header-only version
    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt-header-only)

sqlite-modern-cpp is header-only and can be used from CMake via:

    find_path(SQLITE_MODERN_CPP_INCLUDE_DIRS "sqlite_modern_cpp.h")
    target_include_directories(main PRIVATE ${SQLITE_MODERN_CPP_INCLUDE_DIRS})

 以上です。

0Like

Your answer might help someone💌