0

私は、C++ アクター フレームワークの Hello World の例を実行しようとしています。cmaketools 拡張機能を使用して vscode をビルドしようとすると、パッケージ CAF が見つからないという出力が表示されます。すべての cmakelists.txt ファイルで caf 関連の行をコメント アウトすると、cmake は test.cpp をビルドし、test.exe を実行できます。コンソール出力の図に示すように、vcpkg を介して caf と catch2 をインストールしました。catch2 では、CMakeLists.txt の図に示すように、findpackage と target_link_libraries を使用しています。ただし、caf は、package および target_link_libraries を見つける方法についての情報を提供しません。caf の git には find_package(CAF REQUIRED) がありますが、機能しません。cafが提供する他のパッケージが存在するかどうかを調べようとしましたが、見つかりませんでした。

コンソール出力 インストール caf および vcpkg 経由の catch2

./CMakeLists.txt:

cmake_minimum_required(VERSION 3.18.1)

set(CMAKE_TOOLCHAIN_FILE "c:/Users/daniel/Documents/vcpkg/vcpkg/scripts/buildsystems/vcpkg.cmake") #relative path does not work    
set(CMAKE_CXX_STANDARD 14)

project(mgoe)    

find_package(Catch2 CONFIG REQUIRED)
find_package(CAF REQUIRED)
    
add_subdirectory(programs)

./programs/CMakeLists.txt:

add_executable(caf_helloworld caf_helloworld.cpp)
add_executable(test test.cpp)

target_link_libraries(
   caf_helloworld

   libcaf_io
   libcaf_core
)


target_link_libraries(
   test 
   Catch2::Catch2
)

./programs/caf_helloword.cpp:

#include <iostream>

#include "caf/all.hpp"

using std::endl;
using std::string;

using namespace caf;

behavior mirror(event_based_actor* self) {
  // return the (initial) actor behavior
  return {
    // a handler for messages containing a single string
    // that replies with a string
    [=](const string& what) -> string {
      // prints "Hello World!" via aout (thread-safe cout wrapper)
      aout(self) << what << endl;
      // reply "!dlroW olleH"
      return string(what.rbegin(), what.rend());
    }
  };
}

void hello_world(event_based_actor* self, const actor& buddy) {
  // send "Hello World!" to our buddy ...
  self->request(buddy, std::chrono::seconds(10), "Hello World!").then(
    // ... wait up to 10s for a response ...
    [=](const string& what) {
      // ... and print it
      aout(self) << what << endl;
    }
  );
}

void caf_main(actor_system& system) {
  // create a new actor that calls 'mirror()'
  auto mirror_actor = system.spawn(mirror);
  // create another actor that calls 'hello_world(mirror_actor)';
  system.spawn(hello_world, mirror_actor);
  // system will wait until both actors are destroyed before leaving main
}

// creates a main function for us that calls our caf_main
CAF_MAIN()

./programs/test.cpp:

#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
#include "catch2/catch.hpp"

cmake ツールのビルド出力:

[main] Ordner wird erstellt: mgoe 
[build] Build wird gestartet.
[proc] Befehl wird ausgeführt: "C:\Program Files\CMake\bin\cmake.EXE" --build c:/Users/daniel/Documents/projects/mgoe/build --config Release --target ALL_BUILD -- /maxcpucount:6
[build] CMake is re-running because C:/Users/daniel/Documents/projects/mgoe/build/CMakeFiles/generate.stamp is out-of-date.
[build]   the file 'C:/Users/daniel/Documents/projects/mgoe/CMakeLists.txt'
[build]   is newer than 'C:/Users/daniel/Documents/projects/mgoe/build/CMakeFiles/generate.stamp.depend'
[build]   result='-1'
[build] -- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.19041.
[build] CMake Error at C:/Users/daniel/Documents/vcpkg/vcpkg/scripts/buildsystems/vcpkg.cmake:493 (_find_package):
[build]   By not providing "FindCAF.cmake" in CMAKE_MODULE_PATH this project has
[build]   asked CMake to find a package configuration file provided by "CAF", but
[build]   CMake did not find one.
[build] 
[build]   Could not find a package configuration file provided by "CAF" with any of
[build]   the following names:
[build] 
[build]     CAFConfig.cmake
[build]     caf-config.cmake
[build] 
[build]   Add the installation prefix of "CAF" to CMAKE_PREFIX_PATH or set "CAF_DIR"
[build] -- Configuring incomplete, errors occurred!
[build] See also "C:/Users/daniel/Documents/projects/mgoe/build/CMakeFiles/CMakeOutput.log".
[build]   to a directory containing one of the above files.  If "CAF" provides a
[build]   separate development package or SDK, be sure it has been installed.
[build] Call Stack (most recent call first):
[build]   CMakeLists.txt:12 (find_package)
[build] 
[build] 
[build] CMake Configure step failed.  Build files cannot be regenerated correctly.
[cmakefileapi-parser] Unerwartete Codemodellversion (2.1) von cmake-file-api. Erwartet: (2.0). Möglicherweise ist die IntelliSense-Konfiguration falsch.
[cmakefileapi-parser] Unerwartete Codemodellversion (2.1) von cmake-file-api. Erwartet: (2.0). Möglicherweise ist die IntelliSense-Konfiguration falsch.
[build] Der Build wurde mit dem Exitcode 4294967295 abgeschlossen.
4

1 に答える 1